Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql]Jak zrobic bardziej wydajne zapytanie
Bojakki
post 19.02.2010, 13:40:42
Post #1





Grupa: Zarejestrowani
Postów: 379
Pomógł: 0
Dołączył: 18.08.2004

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


Mam tablice (tablica moze miec max 3 obeikty, ale moze tez nie miec zadnego):
  1. $obiekt[0]='5';
  2. $obiekt[1]='56';
  3. $obiekt[2]='1567';


I teraz na podstawie tych id musze pobrac dane z tabeli

  1. $query = mysql_query("SELECT id, status, name FROM obiekty WHERE id = $obiekt[0] OR id = $obiekt[1] OR id = $obiekt[2]") OR die(mysql_error());
  2. while($lok=mysql_fetch_row($query)){
  3. echo $lok[2].'-'.$lok[1].'<br />';
  4. }


Jak to rozwiazac inaczej bo ORy sa bardzo malo wydajne, poza tym czasami moze byc tak, ze beda tylko 2 obiekty lub 1 lub wcale.


--------------------
Go to the top of the page
+Quote Post
wookieb
post 19.02.2010, 13:45:49
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




google -> mysql IN
Dla połączenia tablicy w jeden string użyj
implode

Ten post edytował wookieb 19.02.2010, 13:46:22


--------------------
Go to the top of the page
+Quote Post
nospor
post 19.02.2010, 13:46:10
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. $query = mysql_query("SELECT id, status, name FROM obiekty WHERE id in (".implode(',',$obiekt).")") OR die(mysql_error());

Dorzuć tylko do tego warunek na pustą tablice.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
zzeus
post 19.02.2010, 13:46:36
Post #4





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


  1. IF(count($obiekt) > 0)
  2. $query = mysql_query("SELECT id, status, name FROM obiekty WHERE id IN (".implode(",", $obiekt).")") OR die(mysql_error());
  3. while($lok=mysql_fetch_row($query)){
  4. echo $lok[2].'-'.$lok[1].'<br />';
  5. }
  6. }


--------------------
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: 19.07.2025 - 08:35