Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Nie wyświetla Wszystkich Wyników
Forum PHP.pl > Forum > PHP
pa-jong
Witam,

problem przedstawia się następująco..

jest kilka identycznych tabel

TABELA mag (27000+ rekordów)
tw_Symbol | tw_Nazwa | st_Stan | tc_CenaBrutto1

TABELA skl_1 (6800+ rekordów)
tw_Symbol | tw_Nazwa | st_Stan | tc_CenaBrutto1

TABELA skl_2 (6700 rekordów)
tw_Symbol | tw_Nazwa | st_Stan | tc_CenaBrutto1

kolumny Symbol i nazwa w każdej tabeli są identyczne różnica jest w kolumnach Stan
wszystkie kolumny Symbol są ustawione jako Primary KEY
tabela mag jest tabelą "matką" i zawiera wszystkie możliwe rekordy

zapytanie brzmi nastepująco

  1.  
  2. SELECT m.tw_Symbol AS m_Symbol,
  3. m.tw_Nazwa AS m_Nazwa,
  4. m.st_Stan AS m_Stan,
  5. m.tc_CenaBrutto1 AS m_Cena,
  6. skl6.st_Stan AS skl6_Stan,
  7. skl6.tc_CenaBrutto1 AS skl6_Cena,
  8. skl10.st_Stan AS skl10_Stan,
  9. skl10.tc_CenaBrutto1 AS skl10_Cena,
  10. skl11.st_Stan AS skl11_Stan,
  11. skl11.tc_CenaBrutto1 AS skl11_Cena
  12. FROM mag AS m, skl_6 AS skl6, skl_10 AS skl10, skl_11 AS skl11
  13. WHERE skl6.tw_Symbol = m.tw_Symbol
  14. AND skl10.tw_Symbol = m.tw_Symbol
  15. AND skl11.tw_Symbol = m.tw_Symbol
  16. ORDER BY m.tw_Nazwa ASC
  17. LIMIT $start, $limit";[/php]

kod wyświetlający

  1. while ($row = mysql_fetch_assoc($result)) {
  2.  
  3. if ($row[skl10_Cena] != $row[skl11_Cena]) { $color='red'; } else { $color='#bcbcbc;';}
  4.  
  5. echo '<tr style="background-color: #F8F8FF;" onmouseover="this.style.backgroundColor="#DDDDDD"" onmouseout="this.style.backgroundColor="#F8F8FF"">
  6. <td align="left">'.$row["m_Symbol"].'</td>
  7. <td><a title="'.$row["m_Nazwa"].'">'.$row["m_Nazwa"].'</a></td>
  8. <td align="center">'.$row["m_Stan"].'<br><small style="color: #bcbcbc;">'.$row["m_Cena"].' zł</small></td>
  9.  
  10. <td align="center">'.$row["skl6_Stan"].'<br><small style="color: #bcbcbc;">'.$row["skl6_Cena"].' zł</small></td>
  11. <td align="center">'.$row["skl10_Stan"].'<br><small style="color: #bcbcbc;">'.$row["skl10_Cena"].' zł</small></td>
  12. <td align="center">'.$row["skl11_Stan"].'<br><small style="color: '.$color.'">'.$row["skl11_Cena"].' zł</small></td>
  13.  
  14. ...


problem polega na tym, że wyświetlają się rekordy, ale ograniczone tabelą zawierającą najmniejsza ilość rekordów.
w tym przykładzie 5700

chciałbym aby wyświetlało mi wszystkie 21000 rekordów które są zapisane w tabeli mag a w przypadku braku jakiegoś symbolu w którejś z tabel rekordy zmienna '.$row["skl_Stan"].' zwracałaby puste pola

gdzie zrobiłem błąd ?
droslaw
Wynik jest jaki jest bo w tym zapytaniu dla każdej tabeli musi być spełniony warunek. Wystarczy, że w jednej tabeli nie będzie towaru i już warunek nie jest spełniony, więc ten towar w pozostałych tabelach też zostanie pominięty.
Połącz je left joinem

  1. SELECT m.tw_Symbol AS m_Symbol,
  2. m.tw_Nazwa AS m_Nazwa,
  3. m.st_Stan AS m_Stan,
  4. m.tc_CenaBrutto1 AS m_Cena,
  5. skl6.st_Stan AS skl6_Stan,
  6. skl6.tc_CenaBrutto1 AS skl6_Cena,
  7. skl10.st_Stan AS skl10_Stan,
  8. skl10.tc_CenaBrutto1 AS skl10_Cena,
  9. skl11.st_Stan AS skl11_Stan,
  10. skl11.tc_CenaBrutto1 AS skl11_Cena
  11. FROM mag AS m
  12. LEFT JOIN skl_6 AS skl6 ON skl6.tw_Symbol = m.tw_Symbol
  13. LEFT JOIN skl_10 AS skl10 ON skl10.tw_Symbol = m.tw_Symbol
  14. LEFT JOIN skl_11 AS skl11 ON skl11.tw_Symbol = m.tw_Symbol
  15. ORDER BY m.tw_Nazwa ASC
  16. LIMIT $start, $limit";[/php]

Zakładam że w tabeli mag masz elementy odpowiadające wszystkim elementom z pozostałych tabel. Inaczej będzie trzeba zastosować FULL JOIN, którego nie ma w Mysqlu.
W takim wypadku trzeba trochę kombinować http://www.xaprb.com/blog/2006/05/26/how-t...-join-in-mysql/
pa-jong
LEFT JOIN... no przecież... dzięki wink.gif

ale.. czy aby nie będzie problemów w przypadku kiedy takich tabel będzie 20+ ?
czy nie spowolni to znacznie zapytania?
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.