Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [sql]Jak zrobic bardziej wydajne zapytanie
Bojakki
post
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
 
Start new topic
Odpowiedzi (1 - 3)
wookieb
post
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
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.
Go to the top of the page
+Quote Post
zzeus
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:44