Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Upoređivanje dve tabele i filtriranje

[es] :: MySQL :: Upoređivanje dve tabele i filtriranje

[ Pregleda: 1444 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nem

Član broj: 302980
Poruke: 19
185.6.188.*



Profil

icon Upoređivanje dve tabele i filtriranje23.10.2021. u 19:53 - pre 30 meseci
Pozdrav, već nedelju dana se mučim sa ovim i ne uspevam da napravim da radi kako treba.
Imam tabelu 'korisnici' (korisnicki_broj, prezime_ime, mesto_id, ulica_id, kucni_broj) i tabelu
prijave(korisnicki_broj, prezime_ime, mesto_id, ulica_id, kucni_broj, godina, mesec, stanje, ocitavac_id)
Do sada se ovo koristilo da korisnici uđu na portal, upišu stanje vodomera, kliknu na prijavi i to se sačuva u tabeli 'prijave'
Sada treba da napravim tabelu 'ocitavanje' koja ce biti rezultat upoređivanja tabele 'korisnici' i tabele 'prijave' - odnosno ako korisnik sam online prijave stanje vodomera da se ne pojavljuje u tabeli 'ocitavanje'.
Praktično... očitavač ide ulicom i ako je korisnik iz neke ulice npr. kućni broj 2 prijavio vodomer on se neće pojaviti na listi korisnika za očitavanje, a korisnik koji živi u broju 4 nije prijavio i on se pojavljuje na listi.
Još treba uzeti u obzir i mesec očitavanja. Jer npr. korisnik je prijavio u 9. mesecu a sada treba da radim za 10. mesec. Da li da pravim 'view' za svaki mesec?
Probao sam LEFT JOIN, NOT IN, NOT EXIST, svašta nešto i sad sam totalno zbunjen, ako može bar neki savet na šta da se fokusiram. Hvala
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Upoređivanje dve tabele i filtriranje23.10.2021. u 21:16 - pre 30 meseci
Dok čitam post, čupam ovo malo kose na glavi, a Bojs i Kod se prevrću u grobu. U tvojoj firmi nisu čuli za normalne forme?
Ovo treba staviti u neki udžbenik, pa da se na fakultetima predaje kako ne treba dizajnirati tabele.

UŽAS!

Jedan način:
Code (sql):

CREATE TABLE korisnici (id INTEGER, brojilo INTEGER);
CREATE TABLE prijave (id INTEGER, brojilo INTEGER, mesec INTEGER);

INSERT INTO korisnici VALUES( 1, 1);
INSERT INTO korisnici VALUES( 2, 2);
INSERT INTO korisnici VALUES( 3, 3);
INSERT INTO korisnici VALUES( 4, 4);

INSERT INTO prijave VALUES ( 1, 1, 1);
INSERT INTO prijave VALUES ( 1, 1, 2);
INSERT INTO prijave VALUES ( 2, 2, 1);
INSERT INTO prijave VALUES ( 4, 4, 2);

SELECT k.* FROM korisnici k
WHERE NOT EXISTS (
   SELECT 1 FROM prijave p
   WHERE p.id = k.id
   AND p.brojilo = k.brojilo
   AND p.mesec = 2);
 


https://paiza.io/projects/PwlqBZJzyxqJo_npa_mB7Q?language=mysql
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Upoređivanje dve tabele i filtriranje23.10.2021. u 21:18 - pre 30 meseci
Uzgred, nisam ni pokušao da ti popravim dizajn, samo me mrzelo da kucam gomilu kolona...
 
Odgovor na temu

nem

Član broj: 302980
Poruke: 19
185.6.188.*



Profil

icon Re: Upoređivanje dve tabele i filtriranje23.10.2021. u 21:23 - pre 30 meseci
Šta je problem sa tabelama?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Upoređivanje dve tabele i filtriranje23.10.2021. u 21:39 - pre 30 meseci
Da li me ti zezaš?
Šta je loše u tabelama, osim što u tabeli prijave imaš PET kolona koje su iste kao u korisnici?
Pa onda za svaki mesec i godinu imaš ponovljeno IME i PREZIME mesto ...
To što nemaš primarni ključ ni u jednoj tabeli?

kako bi to trebalo da izgleda
Tabela brojilo (id, pa sve ostalo što ti je bitno)
Tabela prijave (id_brojila, god_mesec, pa sve ostalo)
Tabela korisnici( id, ime_i_prezime, ...)
Tabela korisnik_brojila ( id_korisnika, id_brojila)...

https://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Upoređivanje dve tabele i filtriranje24.10.2021. u 01:20 - pre 30 meseci
Citat:
djoka_l:

Code:

select k.* from korisnici k
where not exists ( 
   select 1 from prijave p
   where p.id = k.id
   and p.brojilo = k.brojilo 
   and p.mesec = 2);




Ja ih ovo obrnuo

SELECT p.* FROM prijave WHERE p.brojilo = k.brojilo AND p.mesec = 2

Po svemu sudeći to mu daje sve podatke koji mu trebaju zato što ima redudantne podatke jer nije dobro uradjena normalizacija pa veza sa tabelom korisnici i ne treba.

A ako bas treba da se poveze, onda bi tabelu korisnici prosto povezao sa LEFT JOIN....


Pridružujem se sablažnjavanju nad strukturama tabela. :)


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Upoređivanje dve tabele i filtriranje24.10.2021. u 07:48 - pre 30 meseci
@djoka, sta mislis kako su nastale sve ove nosql "baze" :D

@nem, sve je problem sa tabelama, na bilo kom ispitu iz baza bi te izbacili sa ispita, u bilo kojoj pismenom firmi bi dobio otkaz

ako zelis da razumes i da naucis nesto https://mysql.rs/tag/normalizacija/
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.astratelekom.rs.



+218 Profil

icon Re: Upoređivanje dve tabele i filtriranje24.10.2021. u 19:07 - pre 30 meseci
Definitvno da tabele ne valjaju ali ima tu jos problema.
Cak i pored normalizacije, na starim ocitavanjima prilikom promene adrese korisnika ne sme da se menja i adresa gde je vec ocitano.
Kod promene adrese najjednostavnije je dodati novog korisnika ali tu se gubi kontinuitet u placanjima, dugovanjima, zalbama, intervencijama....
Ja bih tu dodao i tabelu "vodomeri", kako bi se pratilo stanje kada, koji i gde je vodomer ugradjen, kako bi se pratilo prethodno stanje. Posle 5 godina vodomer mora da se menja.
Ne ocitavas ti korisnika ili adresu vec vodomer. Vodomer moze da promeni vlasnika. Vlasnik moze da promeni adresu.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Upoređivanje dve tabele i filtriranje24.10.2021. u 19:28 - pre 30 meseci
A i jedna osoba može da ima više stanova/vodomera.
Adresa za dostavu računa ne mora da bude ista kao adresa objekta na kojem se nalazi vodomer.

Vodomer može da promeni vlasnika. Stanje vodomera može da se očita više puta u toku meseca...
Gomila problema sa dizajnom.
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Upoređivanje dve tabele i filtriranje24.10.2021. u 19:28 - pre 30 meseci
Citat:
VladaSu: Definitvno da tabele ne valjaju ali ima tu jos problema.
Cak i pored normalizacije, na starim ocitavanjima prilikom promene adrese korisnika ne sme da se menja i adresa gde je vec ocitano.
Kod promene adrese najjednostavnije je dodati novog korisnika ali tu se gubi kontinuitet u placanjima, dugovanjima, zalbama, intervencijama....
Ja bih tu dodao i tabelu "vodomeri", kako bi se pratilo stanje kada, koji i gde je vodomer ugradjen, kako bi se pratilo prethodno stanje. Posle 5 godina vodomer mora da se menja.
Ne ocitavas ti korisnika ili adresu vec vodomer. Vodomer moze da promeni vlasnika. Vlasnik moze da promeni adresu.


Rekao bih da postoje sve te tabele i da takođe nisu normalizovane, nego je čovek prikazao samo one tabele koje su relevantne za ovo što je pitao. :)
 
Odgovor na temu

nem

Član broj: 302980
Poruke: 19
185.6.188.*



Profil

icon Re: Upoređivanje dve tabele i filtriranje24.10.2021. u 20:47 - pre 30 meseci
Hvala svima koji su pokusali da pomognu.
Primarni ključ je korisnicki_broj. Naveo sam sve kolone da bi bilo jasnije sta zelim da postignem, a ne da diskutujem o dizajnu baze, tebi djoko ako se cupa kosa zbog mojih tabela, slobodno.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.astratelekom.rs.



+218 Profil

icon Re: Upoređivanje dve tabele i filtriranje25.10.2021. u 07:21 - pre 30 meseci
Izgleda da ne svhatas o cemu pricamo. Tvoj problem se resava tako sto ces prvo promeniti dizajn baze i tek onda moze da se diskutuje o nekim SQL-ovima.
Vremenom ces morati da radis izvestaje i druge upite koji nisu ovako jednostavni i problem ce ti biti neresiv iz dva razloga.
Prvi razlog, mozda i resiv, pisaces u najmanju ruku cudne SQL-ovi koje niko nece znati procitati, cak ni ti kada posle vikenda nastavis da radis na kodu.
Drugi razlog koji nije resiv je taj sto ces imati gomilu pogresnih podataka u bazi i to ces tesko ispraviti. Pogresni podaci ce rezultirati pogresnim rezultatima.
Kakav god SQL da napravis nikada neces dobiti ocekivane rezultate.

Iz tvog poslednjeg odgovora mogu da zakljucim da ne znas sta je dizajn baze. Nama na forumu nije problem sto si ti naveo sve kolone.
Problem sto se te kolone nalaze u tim tabelama kod tebe.
Dizajn baze podrazumeva koje tabele se nalaze u bazi i koje kolone imaju te tabele.
Nije svejedno kako napravati te tabele i koje kolone staviti u te tabele i to je kod tebe jako pogresno.

Ako je seminarski ili ispiti onda ga neces poloziti. Ako stvarno radis posao za neki firmu onda odradi kako si zapoceo, uzmi novac i bezi i promeni broj telefona da te vise ne zovu. :)

Ovo je jos jedno resenje za 10-ti mesec ove godine.

Code (sql):

SELECT k.*, p.*
FROM korisnici k
LEFT JOIN prijave p ON p.korisnicki_broj=k.korisnicki_broj AND mesec=10 AND godina=2021
WHERE p.korisnicki_broj IS NULL
 


[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

nem

Član broj: 302980
Poruke: 19
185.6.188.*



Profil

icon Re: Upoređivanje dve tabele i filtriranje25.10.2021. u 07:41 - pre 30 meseci
Hvala Vlado na pomoći.
Ovo je samo jedan mali nezavisni portal i nemam potrebu za izveštajima i ostalim. Podaci moraju da budu ovakvi jer podatke o korisnicima dobijam iz dbf baze i rezulate prikupljanja prijave ponovo moram da ubacim u dbf bazu koja je takookreirana i tu ne mogu ništa da menjam.
Svakako ću probati da uradim pravilno dizajn baze iako praktično neću moći da koristim. Kada uradim obratiću se opet ovde ako neko bude raspoložen za dalje savete.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.astratelekom.rs.



+218 Profil

icon Re: Upoređivanje dve tabele i filtriranje25.10.2021. u 08:10 - pre 30 meseci
Sada je jasnije.
Posto je to mini portal i mnoge stvari nisu bitne i pretpostavljam da ti import radi neki kod, onda kod importa u tvoje tabela mogao bi samo da ih punis podacima koji ti trebaj,u a to je samo oni koji nisu ocitani.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Upoređivanje dve tabele i filtriranje25.10.2021. u 10:15 - pre 30 meseci
radis import iz DBF fajla u normalizovano bazu tako sto citas tu datu i
pravilno je ubacujes u bazu,

exportujes datu u DBF fajl tako sto poslozis datu u upitu da dobijes
izlaz kakav ti je potreban

kako cuvas datu (db model) i kako dobijes i vracas datu su 3 razlicite
stvari

prvi i osnovni princip relacionih baza podataka je da nemas duplikat
date, ako imas duplikat date data ce se koraptovati vremenom

ako zelis da zadrzis "ovakav model" onda koristi neki mongo ili slicnu
nosql kontrapciju gde je normalno da dupliciras datu (otprilike tamo
struktura izgleda identicno ovako kako si ti napravio)
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.astratelekom.rs.



+218 Profil

icon Re: Upoređivanje dve tabele i filtriranje25.10.2021. u 11:08 - pre 30 meseci
Ne znam u kojem programu radi ali moze da procita korisnike i da procita prijave iz DBF fajla kao sto vec radi ali sa malim izmenama.
1. Procita prvo korisnike u jedan array gde ce key biti korisnicki_broj
2. Zatim procita prijave ali u array koji ce upisatvati procitane podatke upisuje samo za trazeni mesec i godinu i key ce biti korisnicki broj.
3. Ako je php uradi nesto kao array_diff_key i dobije gotov rezultat koji upise u jednu tabelu.


[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

[es] :: MySQL :: Upoređivanje dve tabele i filtriranje

[ Pregleda: 1444 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.