Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Jak rozwiązać problem zapytania do bazy
Forum PHP.pl > Forum > Przedszkole
czuwaj
Witam, mam pewien problem. Mam dwie tabele w bazie sub i action chcę otrzymać zapytanie dzięki któremy zadziała mi ten kod. Z zapytaniem chodzi o to, że gdy w tabeli sub id jest równe id w tabeli action to zostanie pobrany rekord z bazy. Nie miałem zbytnio pomysłów jak to zrobić więc pomyślałem nad rozwiązaniem
  1. $q = mysql_query("SELECT * FROM sub WHERE people='$id_login';");
  2. $ciag_sub = null;
  3. while($my_sub = mysql_fetch_assoc($q)){
  4. $ciag = ' people=\''.$my_sub['subskrypcja'].'\' AND ';
  5. $ciag_sub = $ciag_sub.$ciag;
  6. }
  7. // echo $ciag_sub; wynik to "people=28 AND people=27 AND people=26 AND people=25 AND people=24 AND people=23 AND people=22 AND people=21 AND people=19 AND "
  8.  
  9.  
  10. $wynik = mysql_query("SELECT * FROM action WHERE ".$ciag_sub." people='$id_login' ORDER BY id DESC LIMIT ".$postnumbers." OFFSET ".$offset);
  11.  

ale nie działa mi ten sposób czy są jakieś inne możliwości rozwiązania tego problemu ?
webmaniak
Rozwiązaniem jest tutaj join. zapytanie wygląda tak:
  1. SELECT sub.*, action.* FROM sub JOIN action ON sub.id= action.id

Możesz też dodać warunek WHERE. Poczytaj o join bo jest tego mnóstwo, a przedstawiłem najprostsze użycie :-)
sebastian.rozmus
  1. SELECT * FROM `sub` LEFT JOIN `action` ON `sub`.`people` = `action`.`id`
czuwaj
moje zapytanie wygląda tak
  1. $wynik = mysql_query("SELECT * FROM `sub` LEFT JOIN `action` ON `sub`.`people` = `action`.`people` ORDER BY id DESC LIMIT ".$postnumbers." OFFSET ".$offset);


pojawia sie błąd

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\h[...]

czytałem ale nie zabardzo wiem jak rozwiązać ten problem
webmaniak
Left join zwróci rekord jeśli nie będzie spełniony warunek w drugiej tabeli, lepsze jest tu join- wg opisu autora :-)
Mój pusty był do wypowiedzi sebastian.rozmus.
Co do tego błędu to pokaż co masz później. Poza tym spróbuj w sql wykonać to zapytanie, zobacz czy coś zwraca.
mmmmmmm
Jakbyś dał mysql_error(), to byś zobaczył 'ambigous field id' smile.gif
w ORDRR BY nie podajesz wg jakiego id ma sortować. Domyzlam się, ze jest w oby tabelach.
czuwaj
rozwiązaniem problemu jest ORDER BY action.id DESC

zwraca mi ten zam rekord po kilka razy
co może być nie tak?
webmaniak
A co używasz left join czy sam join? Możeszteż dodać distinct:
sql.dawida.pl/master.htm?http://sql.dawida.pl/distinct.htm
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-2024 Invision Power Services, Inc.