Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Pobieranie danych z 2 tablic
Forum PHP.pl > Forum > PHP
RubiX
Witam muszę pobrać dane z 2 tablic (zakupy i platnosci) aby stworzyć tzw księgę przychodów i rozchodów.

Z artów w necie napisałem takie 2 polecenia:

  1. <?php
  2. $wynik = mysql_query("SELECT * FROM zakupy, platnosci WHERE zakupy.z_data>='$od' AND zakupy.z_data<='$do' AND platnosci.p_data>='$od' AND platnosci.p_data<='$do' ORDER BY zakupy.z_data DESC, platnosci.p_data DESC");
  3.  
  4. $wynik = mysql_query("SELECT * FROM zakupy INNER JOIN platnosci WHERE z_data.zakupy>='$od' AND z_data.zakupy<='$do' AND p_data.platnosci>='$od' AND p_data.platnosci<='$do' ORDER BY z_data.zakupy DESC, p_data.platnosci DESC");
  5. ?>


gdzie ani 1 ani 2 nie zwraca mi rekordów
w sortowaniu :
$od = przesłane metodą post np 2009-03-01
$do = przesłane metodą post np 2009-03-31

Czyli pobiera mi rekordy z 2 tablic między tymi datami.
Oczywiście wyżej w kodzie mam $od = $_POST['od']; żeby nie było nieporozumień smile.gif

Czy da sięto jakoś poprawnie skonstruować ?
Noddi
  1. SELECT z.date, p.date FROM zakupy AS z, platnosci AS p WHERE (z.date BETWEEN '" . $od . "' AND '" . $do . "') AND (p.date BETWEEN '" . $od . "' AND '" . $do . "') ORDER BY z.date, p.date DESC;


edit: Czy któraś z tabel zawiera jakiś klucz obcy drugiej tabeli?
RubiX
  1. <?php
  2. SELECT z.date, p.date FROM zakupy AS z, platnosci AS p WHERE (z.date BETWEEN '" . $od . "' AND '" . $do . "') AND (p.date BETWEEN '" . $od . "' AND '" . $do . "') ORDER BY z.date, p.date DESC;
  3. ?>


hm mozesz mi to troche wytlumaczyc ? był bym wdzięczny smile.gif mam takie tabele:

platnosci
p_id | p_nazwa | p_data |

zakupy
z_id | z_nazwa | z_data |

Uprościłem te 2 tabele do tych pól które potrzebuje w select

no i musiał bym mieć SELECT * ponieważ muszę pobrać wszystkie dane z obydwu tabel

Zrobiłem takie cos:
  1. <?php
  2. $wynik = mysql_query("SELECT *, z_data, p_data FROM zakupy AS z, platnosci AS p WHERE (z.z_data BETWEEN '" . $od . "' AND '" . $do . "') AND (p.p_data BETWEEN '" . $od . "' AND '" . $do . "') ORDER BY z.z_data, p.p_data DESC;");
  3. ?>



ale nadal nie działa
Noddi
  1. SELECT z.z_id, z.z_nazwa, z.z_data, p.p_id, p.p_nazwa, p.p_data FROM zakupy AS z, platnosci AS p WHERE (z.z_data BETWEEN '" . $od . "' AND '" . $do . "') AND (p.p_data BETWEEN '" . $od . "' AND '" . $do . "') ORDER BY z.z_data, p.p_data DESC;


Dane pobiera z dwóch tabel: "zakupy AS z, platnosci AS p".
SQL Alias
SQL BETWEEN Operator
RubiX
Noi mam takie cos:

  1. <?php
  2. $wynik = mysql_query("SELECT z.z_id, z.z_nazwa, z.z_data, p.p_id, p.p_nazwa, p.p_data FROM zakupy AS z, platnosci AS p WHERE (z.z_data BETWEEN '" . $od . "' AND '" . $do . "') AND (p.p_data BETWEEN '" . $od . "' AND '" . $do . "') ORDER BY z.z_data, p.p_data DESC");
  3.  
  4. while($dane = mysql_fetch_array($wynik)) {
  5.  
  6. $data = $dane['z.z_data'];
  7. echo $data;
  8. }
  9. ?>


no i to niedziała nic niepokazuje
a powiedz mi jak moge to teraz posortowac aby dac do zmiennych np skad mam wiedziec czy aktualnie rekord pobierany jest z zakupy czy z platnosci czy moge zrobic tak:

  1. <?php
  2. if ($dane['z.z_id'] {
  3. $data = $dane['z.z_data'];
  4. } esle {
  5. $data = $dane['p.z_data'];
  6. }
  7. ?>

Wiadomo że jak niepobierze z zakupy tego id to else pobiera z platnosci
Noddi
  1. <?php
  2. $wynik = mysql_query("SELECT z.z_id, z.z_nazwa, z.z_data, p.p_id, p.p_nazwa, p.p_data FROM zakupy AS z, platnosci AS p WHERE (z.z_data BETWEEN '" . $od . "' AND '" . $do . "') AND (p.p_data BETWEEN '" . $od . "' AND '" . $do . "') ORDER BY z.z_data, p.p_data DESC");
  3.  
  4. echo "<pre>";
  5. while($dane = mysql_fetch_array($wynik))  {
  6.    print_r($dane);
  7. }
  8. echo "</pre>";
  9. ?>


Nie używaj aliasów w nazwach zmiennych kiedy chcesz je wyświetlić z tablicy, alias był wykorzystywany tylko w zapytaniu do bazy.

Pozdrawiam.

edit: Jeżeli te tabele nie są w żadnej relacji(a z tego co piszesz to nie) to lepiej, rozbić to na 2 zapytania do bazy danych:

  1. <?php
  2. $wynik1 = mysql_query("SELECT z.z_id, z.z_nazwa, z.z_data FROM zakupy AS z WHERE z.z_data BETWEEN '" . $od . "' AND '" . $do . "' ORDER BY z.z_data DESC");
  3. ?>


  1. <?php
  2. $wynik2 = mysql_query("SELECT p.p_id, p.p_nazwa, p.p_data FROM platnosci AS p WHERE p.p_data BETWEEN '" . $od . "' AND '" . $do . "' ORDER BY p.p_data DESC");
  3. ?>
RubiX
ok wielkie dzięki już mi wyszukuje tylko teraz powiedz mi jak mogę rozpoznać czy aktualny rekord pobierany jest z tabeli zakupy czy z tabeli platnosci ? da sie to jakos zrobic ?
Noddi
Rozbij to jedno zapytanie na dwa tak jak w zedytowanym przeze mnie poście wyżej. Nie ma sensu pobieranie danych z dwóch tabel jednym zapytaniem, jeżeli nie są one w żadnej relacji ze sobą, wprowadza się tylko chaos.
RubiX
Ok jakoś poradziłem z mieszaniem dzięki za pomoc smile.gif
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.