Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwie tabele, jeden warunek...
Forum PHP.pl > Forum > Bazy danych
MichuM.
Widze pod spodem podobny topic, jednak nie rozwiazuje on mojego problemu.... Otoz mam 2 tabele:
1: historia
2: teleadresowe

Mam za zadanie wyciagnac wszystkie dane z tabeli "teleadresowe" na podstawie warunku ktory jest spelniony w tabeli historia.

W tabeli "historia" przechowuje dane i date dotyczace spotkan, a w tabeli "teleadresowe" mam dane klienta ( telefon, adres itp ).
I teraz mam formularz w ktorym wpisuje date i chce aby wyswietlili mi sie najpierw dane klienta, a pozniej spotkania... robie to tak
Kod
select * from teleadresowe, historia where data = $data order by id desc

wynik jest jednak bledny - wyswietla wszystkie rekordy...nie zaleznie od wpisanej daty...

Reasumujac:
Jak wyswietlic rekord z tabeli teleadresowe ( mam wspolne id w obu tabelach ) na podstawie zapytania o date spotkania z tabeli historia ?

Pozdrawiam
MichuM.
Czy taki select ma sens ?

Kod
$result = mysql_query("SELECT * FROM teleadresowe, historia WHERE historia.data_kontaktu like '$data_kontaktu' and teleadresowe.id = historia.id;");
adwol
Cytat
Czy taki select ma sens ?

Kod
$result = mysql_query("SELECT * FROM teleadresowe, historia WHERE historia.data_kontaktu like '$data_kontaktu' and teleadresowe.id = historia.id;");

Zależy co chcesz uzyskać. Pokaż definicję obu tabel i powiedz co to jest za warunek który jest spelniony w tabeli historia.
Jabol
1. jak robisz czysty sql to używaj BBCODE - SQL.
2. a nie powinienes zamienić warunków kolejnością ?
uboottd
Jabol: ad.2 Kwestia dbms-a a w zasadzie jego optimizera. Np. Mysql i tak sobie te warunki ustawi w takiej kolejnosci zeby miec jak najmniej zabawy z zapytaniem. Inne dbms-y pewnie tez tak robia (w koncu to dosc oczywiste) wiec kolejnosc warunkow nie ma znaczenia.
MichuM.
w sumie robilem to tak i dziala:
[sql:1:cc82ffd316]


$result = mysql_query("SELECT * FROM teleadresowe, historia WHERE historia.data_kontaktu like '$data_kontaktu' and teleadresowe.id = historia.id ;");

[/sql:1:cc82ffd316]

i jak zwykle powstal problem.. otoz jest tak ze jesli $data kontaktu i zmienna id sie pokrywa to wsywietla sie wynik i jest super... ale jesli mam w tabeli mam dwa razy wspolne $data_kontaktu i id ( normalna sytuacja w sumie ) to wyswietlaja mi sie te SAME dane z tabeli teleadresowaj dwukrotnie...jak zrobic aby bylo mozliwe dla danego zlaczenia $data_kontaktu = id wywolanie danych tylko raz ? limit chyba nie wchodzi w rachube.
Jabol
Cytat
Jabol: ad.2 Kwestia dbms-a a w zasadzie jego optimizera. Np. Mysql i tak sobie te warunki ustawi w takiej kolejnosci zeby miec jak najmniej zabawy z zapytaniem. Inne dbms-y pewnie tez tak robia (w koncu to dosc oczywiste) wiec kolejnosc warunkow nie ma znaczenia.
ale przyznasz, ze lepiej sie czyta kod w ktorym join jest na pierwszej pozycji ( o ile nie uzyto slowa kluczowego - calkowiete niebo )?

ps. MichuM. : moja rada. zmien nazwy kolumn albo listuj je odreczie ( aliasując ) a nie za pomoca *, ponieważ teraz możesz mieć kolizje nazw.
NaC
Cytat
w sumie robilem to tak i dziala:
[sql:1:b93fb2088a]


$result = mysql_query("SELECT * FROM teleadresowe, historia WHERE historia.data_kontaktu like '$data_kontaktu' and teleadresowe.id = historia.id ;");

[/sql:1:b93fb2088a]

i jak zwykle powstal problem.. otoz jest tak ze jesli $data kontaktu i zmienna id sie pokrywa to wsywietla sie wynik i jest super... ale jesli mam w tabeli mam dwa razy wspolne $data_kontaktu i id ( normalna sytuacja w sumie ) to wyswietlaja mi sie te SAME dane z tabeli teleadresowaj dwukrotnie...jak zrobic aby bylo mozliwe dla danego zlaczenia $data_kontaktu = id wywolanie danych tylko raz ? limit chyba nie wchodzi w rachube.


Dzisiaj mialem podobny problem i zarejestrowalem sie na tym forum, aby ktos mi pomogl, ale nim na maila przyszla aktywacja sam zdarzylem rebusa rozwiazac, tyle ze nie mialem takich samych numerkow id...ale za to takie same pola 'nazwa' i to rozwiazalo problem (bo niestety nie wyswietly sie zdublowane wyniki, tylko wielokrotnie zwielokrotnione ;).
Tak czy inaczej, na wstepie zaznacze, ze jestem poczatkujacym i nie mam pojecia, czy to pomoze, ale jezeli Ci sie wyniki dubluja, to maja taki sam ID, wiec GROUP powinno rozwiazac problem :

[sql:1:b93fb2088a]


$result = mysql_query("SELECT * FROM teleadresowe, historia WHERE historia.data_kontaktu like '$data_kontaktu' and teleadresowe.id = historia.id GROUP BY id");

[/sql:1:b93fb2088a]
MichuM.
heh dokladnie o to chodzilo smile.gif, dziekuje wszystkim.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.