Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Pobieranie danych z 2 tablic
RubiX
post 22.03.2009, 19:10:24
Post #1





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ć ?

Ten post edytował RubiX 22.03.2009, 19:11:43


--------------------
===================================

\o/ torebki
Go to the top of the page
+Quote Post
Noddi
post 22.03.2009, 19:48:45
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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?

Ten post edytował Noddi 22.03.2009, 19:54:24


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
RubiX
post 22.03.2009, 19:54:54
Post #3





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


  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

Ten post edytował RubiX 22.03.2009, 19:59:47


--------------------
===================================

\o/ torebki
Go to the top of the page
+Quote Post
Noddi
post 22.03.2009, 20:00:26
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
RubiX
post 22.03.2009, 20:10:49
Post #5





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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


--------------------
===================================

\o/ torebki
Go to the top of the page
+Quote Post
Noddi
post 22.03.2009, 20:34:35
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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. ?>


Ten post edytował Noddi 22.03.2009, 20:43:07


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
RubiX
post 22.03.2009, 20:47:21
Post #7





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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 ?


--------------------
===================================

\o/ torebki
Go to the top of the page
+Quote Post
Noddi
post 22.03.2009, 20:51:24
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
RubiX
post 22.03.2009, 20:53:27
Post #9





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Ok jakoś poradziłem z mieszaniem dzięki za pomoc smile.gif

Ten post edytował RubiX 22.03.2009, 22:06:31


--------------------
===================================

\o/ torebki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 06:07