Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Nie wyświetla Wszystkich Wyników
pa-jong
post
Post #1





Grupa: Zarejestrowani
Postów: 64
Pomógł: 1
Dołączył: 21.02.2008
Skąd: Warszawa

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


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 ?

Ten post edytował pa-jong 7.01.2012, 23:42:22
Go to the top of the page
+Quote Post
droslaw
post
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


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/

Ten post edytował droslaw 8.01.2012, 00:47:50
Go to the top of the page
+Quote Post
pa-jong
post
Post #3





Grupa: Zarejestrowani
Postów: 64
Pomógł: 1
Dołączył: 21.02.2008
Skąd: Warszawa

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


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?
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 Aktualny czas: 19.08.2025 - 20:12