Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Połączenie zapytań w jedno
Forum PHP.pl > Forum > Przedszkole
dopal
Witam

Mam zriobioną dużą tablekę w której na chwilę obecną jest 100 zapytań do bazy. Czy da się może jakoś urpościć ten fragment kodu?
  1. <td align="center"><?php $query1 = mysql_query("SELECT * FROM dok1 WHERE `status`='Uwagi' AND `miasto`='Warszawa'"); $ilosc = mysql_num_rows($query1);
  2.  
  3. echo '<b>'.$ilosc.'</b>';?></td>
  4.  
  5. <td align="center"><?php $query2 = mysql_query("SELECT * FROM dok1 WHERE `status`='Uwagi' AND `miasto`='Wrocław'"); $ilosc = mysql_num_rows($query2);
  6. echo '<b>'.$ilosc.'</b>';?></td>
  7.  
  8. <td align="center"><?php $query3 = mysql_query("SELECT * FROM dok1 WHERE `status`='Uwagi' AND `miasto`='Lublin'"); $ilosc = mysql_num_rows($query3);
  9. echo '<b>'.$ilosc.'</b>';?></td>
  10.  
  11. <td align="center"><?php $query4 = mysql_query("SELECT * FROM dok1 WHERE `status`='Uwagi' AND `miasto`='Poznańj'"); $ilosc = mysql_num_rows($query4);
  12. echo '<b>'.$ilosc.'</b>';?></td><tr>


Z tabeli dok1 chcę wiedzieć ile rekordów spełnia poszczególne zapytanie, a później chcę tą liczbę wyświetlić na stronie.

ma ktoś jakiś pomysł?

Pozdrawiam
mmmmmmm
  1. SELECT miasto, Count(*) ilosc FROM dok1 WHERE `status`='Uwagi' AND miasto IN ('Warszawa', 'Wrocław', 'Lublin', 'Poznań') GROUP BY 1 ORDER BY 1
dopal
Ok, a jak to wyświetlić by dla każdego miasta była podana wartość w tabelce?
Tak jak to było w moim kodzie.
untorched
Sprawdź co zwraca zapytanie...
dopal
Jeśli zrobię tak:

  1. <td align="center"><?php $query1 = mysql_query("SELECT miasto, Count(*) ilosc FROM dok1 WHERE `status`='Uwagi' AND miasto IN ('Warszawa', 'Wrocław', 'Lublin', 'Poznań') GROUP BY 1 ORDER BY 1");
  2. $ilosc = mysql_num_rows($query1);
  3.  
  4. echo '<b>'.$ilosc.'</b>';?></td>


To otrzymuję poprawny wynik, ale zsumowany dla wszystkich miast.
np.
dla warszawy mam 2, dla wrocławia 3, dla lublina 5, dla poznania 0

to chcę otrzymać taką tabelkę:

Warszawa 2
Wrocław 3
Lublin 5
Poznań 0



Moimi zapytaniami to wychodzi, ale to zdecydowania za dużo zapytań do bazy. Chodzi by jednym zapytaniem otrzymać taki wynik jak pokazałem wyżej
untorched
Zrób tak i zobacz co ci wyjdzie smile.gif
  1. $result = mysql_query("SELECT miasto, Count(*) ilosc FROM dok1 WHERE `status`='Uwagi' AND miasto IN ('Warszawa', 'Wrocław', 'Lublin', 'Poznań') GROUP BY 1 ORDER BY 1");
  2.  
  3. while($row = mysql_fetch_array($result))
  4. {
  5. echo $row['miasto'].' - '.$row['ilosc'].'<br>';
  6. }
-dopal-
Ehhhh....
nie jest to to, czego oczekiwałem. Może ma ktos inny pomysł jak to można zrobić?
untorched
To nie bardzo rozumiem o co ci chodzi. To zapytanie, które zostało podane przez kolege wyżej zwraca dokładnie to samo co tamte twoje cztery, ale w postaci tablicy.
  1. <?
  2. $result = mysql_query("SELECT miasto, Count(*) ilosc FROM dok1 WHERE `status`='Uwagi' AND miasto IN ('Warszawa', 'Wrocław', 'Lublin', 'Poznań') GROUP BY 1 ORDER BY 1");
  3.  
  4. $miasto = array();
  5.  
  6. while($row = mysql_fetch_array($result))
  7. {
  8. $miasto[$row['miasto']] = $row['ilosc'];
  9. }
  10. ?>
  11. <td align="center">
  12. <?php echo '<b>'.$miasto['Warszawa'].'</b>'; ?>
  13. </td>
  14.  
  15. <td align="center">
  16. <?php echo '<b>'.$miasto['Wrocław'].'</b>'; ?>
  17. </td>
  18.  
  19. <td align="center">
  20. <?php echo '<b>'.$miasto['Lublin'].'</b>'; ?>
  21. </td>
  22.  
  23. <td align="center">
  24. <?php echo '<b>'.$miasto['Poznań'].'</b>'; ?>
  25. </td><tr>


Efekt taki sam, zapytanie tylko jedno wink.gif

// Edit:

Chyba zrozumiałem dlaczego Ci nie pasuje, ponieważ zapytanie jest skonstruowane dla czterech miast, a potrzebujesz więcej, tak?
Jeśli o to ci chodzi to zapytanie będzie wtedy wyglądać tak:
  1. SELECT miasto, Count(*) ilosc FROM dok1 WHERE `status`='Uwagi' GROUP BY 1 ORDER BY 1
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.