Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Optymalizacja zapytania
Forum PHP.pl > Forum > Przedszkole
trucksweb
optymalizuje wlasnie swoj skrypt i staram sie realizowac zapytanie poprzez zlaczenia i podzapytania, ale zastanawiam sie czy przy takim czyms to przejdzie.
Mam pole wyboru <option>:

  1. <select name="kategoria" size="1" >
  2. ';?> <?php $zapytanie2 = "SELECT id_magazynu, nazwa FROM magazyny WHERE status=1";
  3.  $wynik2 = @mysql_query($zapytanie2);
  4.  
  5. while ($row2 = mysql_fetch_array($wynik2, MYSQL_ASSOC)) 
  6. {
  7.  echo '<optgroup label="'.$row2['nazwa'].'">';
  8.  $zapytanie2a = "SELECT * FROM kategorie WHERE id_magazynu=".$row2['id_magazynu']."";
  9.  $wynik2a = @mysql_query($zapytanie2a);
  10.  while ($row2a = mysql_fetch_array($wynik2a, MYSQL_ASSOC)) 
  11. {
  12. if ( $row2a['id_kat'] == $row['id_kategorii'] )
  13. {
  14. echo "<option value='{$row2a['id_kat']}' selected='selected'>{$row2a['nazwa']}</option>";
  15.  } else 
  16. {
  17. echo "<option value='{$row2a['id_kat']}'>{$row2a['nazwa']}</option>";
  18. }
  19. }
  20. echo '</optgroup>';
  21. }
  22.  
  23.  
  24. echo </select>


moze ktos poradzic czy da sie te dwa zapytania przedstawic jednym ?
jakkolwiek
możesz połączyć dwa zapytania za pomocą funkcji np. JOIN albo UNION.

Kod
http://en.wikipedia.org/wiki/Join_(SQL)
http://en.wikipedia.org/wiki/Set_operations_(SQL)
Xniver
Raczej jest to niemożliwe ,ale mogę się mylić. (JOIN'ami tego raczej nie zrobisz)

Ale możesz tak to rozwiązać:
  1. <?php
  2. $result = mysql_query("SELECT * FROM `kategorie`");
  3.  
  4. while($row = mysql_fetch_assoc($result))
  5. {
  6. $cats[$row['id_magazynu']][] = $row;
  7. }
  8.  
  9. $result = mysql_query("SELECT `id_magazynu`, `nazwa` FROM `magazyny` WHERE `status` = 1");
  10.  
  11. while($row = mysql_fetch_assoc($result))
  12. {
  13. if(!empty($cats[$row['id_magazynu']]))
  14. {
  15. echo '<optgroup label="' . $row['nazwa'] . '">';
  16.  
  17. foreach($cats[$row['id_magazynu']] as $cat)
  18. {
  19. echo '<option value="' . $cat['id_kat'] . '">' . $cat['nazwa'] . '</option>'; 
  20. }
  21.  
  22. echo '</optgroup>';
  23. }
  24. }
  25. ?>
jakkolwiek
Zobacz u siebie co zwróci Ci zapytanie:

  1. SELECT id_magazynu, nazwa FROM magazyny WHERE STATUS=1
  2. UNION
  3. SELECT * FROM kategorie WHERE id_magazynu=".$row2['id_magazynu']."
trucksweb
JOIN probowalem ale troche sie pogubilem i dalem spokoj,
UNION tez nie poszedl, zwraca blad:
Cytat
#1222 - The used SELECT statements have a different number of columns
Xniver
O ile pamiętam to przy UNIONie SELECTy muszą mieć taką samą strukture. Więc nie zadziała. http://www.w3schools.com/sql/sql_union.asp. Najlepszy sposób na zoptymalizowanie tego skryptu IMO jest w moim pierwszym poście w tym topicu.
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.