Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Optymalizacja zapytania
trucksweb
post 18.07.2008, 11:00:15
Post #1





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

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


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 ?


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post
jakkolwiek
post 18.07.2008, 11:11:34
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.07.2008
Skąd: Wrocław

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


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)


--------------------
--
Pozdrawiam serdecznie,
P. M. R.
Go to the top of the page
+Quote Post
Xniver
post 18.07.2008, 11:11:59
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


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


Ten post edytował Xniver 18.07.2008, 11:12:23
Go to the top of the page
+Quote Post
jakkolwiek
post 18.07.2008, 11:17:35
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.07.2008
Skąd: Wrocław

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


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']."


--------------------
--
Pozdrawiam serdecznie,
P. M. R.
Go to the top of the page
+Quote Post
trucksweb
post 18.07.2008, 11:24:18
Post #5





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

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


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


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post
Xniver
post 18.07.2008, 11:31:01
Post #6





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


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.

Ten post edytował Xniver 18.07.2008, 11:34:22
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.08.2025 - 04:34