Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zapytanie z IF'em?
Forum PHP.pl > Forum > Przedszkole
in5ane
Cześć, mam takie zapytanie:
  1. SELECT id, login FROM users WHERE `or` IN (1, 2) OR `type` = $type ORDER BY `date_add` DESC;
Chciałbym dodać, coś takiego, że jeżeli tutaj jest spełnione np., że `or` jest 1 lub 2 (typ już w tym wypadku nie ważny) to, żeby gdy zmienna $type = 4, nie dawało wyników z type 1, a gdy zmienna $type = 5, nie dawało wyników z type 2. Pomoże ktoś, bo kombinuję i nie mogę do tego dojść.
Pawel_W
  1. SELECT id, login FROM users WHERE `or` IN (1, 2) AND `type` = $type ORDER BY `date_add` DESC;

o to Ci chodziło?
in5ane
@edit: rozwiązałem problem za pomocą PHP.
!*!
Cytat(in5ane @ 26.03.2013, 08:34:51 ) *
@edit: rozwiązałem problem za pomocą PHP.

To wypadałoby je podać.
in5ane
Po prostu sprawdziłem, że jak $type jest 4, to jedno zapytanie, a jak $type jest 5 to drugie zapytanie:
  1. if ($type == 4)
  2. $query = $this->db->query("SELECT id FROM users WHERE (`or` IN (1, 2) AND `type` = 1) OR `type` = 4 ORDER BY `date_add` DESC;");
  3. elseif ($type == 5)
  4. $query = $this->db->query("SELECT id FROM users WHERE (`or` IN (1, 2) AND `type` = 2) OR `type` = 5 ORDER BY `date_add` DESC;");
thek
A co byś powiedział o:
  1. $query = $this->db->query("SELECT id FROM users WHERE (`or` IN (1, 2) AND `type` = ".($type-3).") OR `type` = ".$type." ORDER BY `date_add` DESC;");
in5ane
Naszło mnie teraz pytanie. Co będzie bardziej optymalne? Jesteś w stanie od razu powiedzieć, czy trzeba by było sprawdzić?
Pawel_W
Cytat(in5ane @ 26.03.2013, 16:56:46 ) *
Naszło mnie teraz pytanie. Co będzie bardziej optymalne? Jesteś w stanie od razu powiedzieć, czy trzeba by było sprawdzić?

przecież to jest to samo... to tak jakby porównywać
  1. $i = 3;
  2. if($i==3){
  3. return 1;
  4. } else if($i==4){
  5. return 2;
  6. }

i
  1. $i = 3;
  2. return $i-2;
in5ane
Wiesz, wydawało mi się, że operacje wykonywane w PHP różnią się od operacji wykonywanych w SQL (tutaj dokładniej MySQL).
Pawel_W
w którym miejscu masz tu porównanie mysql i php, bo nie widzę?
  1. $query = $this->db->query("SELECT id FROM users WHERE (`or` IN (1, 2) AND `type` = ".($type-3).") OR `type` = ".$type." ORDER BY `date_add` DESC;");
i
  1. if ($type == 4)
  2. $query = $this->db->query("SELECT id FROM users WHERE (`or` IN (1, 2) AND `type` = 1) OR `type` = 4 ORDER BY `date_add` DESC;");
  3. elseif ($type == 5)
  4. $query = $this->db->query("SELECT id FROM users WHERE (`or` IN (1, 2) AND `type` = 2) OR `type` = 5 ORDER BY `date_add` DESC;");
wykonują w efekcie takie samo zapytanie, więc w dalszym ciągu cała "optymalizacja" o którą pytasz rozgrywa się na poziomie php, nie bazy danych
thek
To co zaproponowałem to jedynie wyrzucene IF-ELSEIFa na rzecz prostej operacji arytmetycznej. Jak już wspomniano, całość i tak musi być wpierw po stronie PHP utworzona. Pawel_W dobrze tu podsumował całość. To jest dokładnie to samo, ale zapisane po prostu zwięźlej.
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.