Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Union i Oder by
shycat
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 25.02.2008

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


Witam, mam taki kod:

  1. $zap=mysql_query("
  2.  
  3. (SELECT * FROM `baza_danych` WHERE (`online` > ".$time2.") AND `id` NOT LIKE '".$id."' AND `pay_typ` LIKE '3' AND `pay_do` > '".$time."')
  4.  
  5. UNION
  6.  
  7. (SELECT * FROM `baza_danych` WHERE (`online` > ".$time2.") AND `id` NOT LIKE '".$id."' ORDER BY `ostatnie_logowanie`)
  8.  
  9. LIMIT ".(($s*20)-20).",20"
  10.  
  11. );



No i mam problem z Order by w drugiej czesci, poniewaz one po prostu nie dziala... wyniki sa "pomieszane" tak jakby w ogole tego Order by nie bylo. Jak moge naprawic ten blad?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


A po co Ci tutaj w ogóle ten UNION skoro to możesz wrzucić w jedno zapytanie? Jeżeli chcesz by najpierw były zwracane rekordy gdzie:
  1. `pay_typ` LIKE '3' AND `pay_do` > '".$time."
To po prostu posortuje je wg tych danych, czyli:
  1. SELECT * FROM baza_danych
  2. WHERE online > :time2 AND id != :id
  3. ORDER BY pay_typ = 3, pay_do > :time, ostatnie_logowanie
  4. LIMIT :offset, 20;


PS. Co to za dziwne pomysły by porównywać przy pomocy LIKE, liczby traktować jako tekst i nie używać prepared statements?
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 16:56