Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Zapytanie z IF'em?
in5ane
post 26.03.2013, 01:03:50
Post #1





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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ść.

Ten post edytował in5ane 26.03.2013, 01:05:49


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Pawel_W
post 26.03.2013, 01:22:28
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


  1. SELECT id, login FROM users WHERE `or` IN (1, 2) AND `type` = $type ORDER BY `date_add` DESC;

o to Ci chodziło?
Go to the top of the page
+Quote Post
in5ane
post 26.03.2013, 08:34:51
Post #3





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


@edit: rozwiązałem problem za pomocą PHP.

Ten post edytował in5ane 26.03.2013, 08:46:17


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
!*!
post 26.03.2013, 09:47:05
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat(in5ane @ 26.03.2013, 08:34:51 ) *
@edit: rozwiązałem problem za pomocą PHP.

To wypadałoby je podać.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
in5ane
post 26.03.2013, 14:26:32
Post #5





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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;");


Ten post edytował in5ane 26.03.2013, 14:27:23


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
thek
post 26.03.2013, 15:23:26
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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;");
Powód edycji: [thek]: Oczywiście nie zapomnij, że dane bindujemy przez PDO, a nie na pałę :)


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
in5ane
post 26.03.2013, 16:56:46
Post #7





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Naszło mnie teraz pytanie. Co będzie bardziej optymalne? Jesteś w stanie od razu powiedzieć, czy trzeba by było sprawdzić?


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Pawel_W
post 26.03.2013, 19:29:26
Post #8





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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;
Go to the top of the page
+Quote Post
in5ane
post 26.03.2013, 20:30:42
Post #9





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Wiesz, wydawało mi się, że operacje wykonywane w PHP różnią się od operacji wykonywanych w SQL (tutaj dokładniej MySQL).


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Pawel_W
post 26.03.2013, 22:22:46
Post #10





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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
Go to the top of the page
+Quote Post
thek
post 26.03.2013, 22:30:36
Post #11





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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: 18.04.2024 - 08:06