Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]sortowanie po kolumnie SET, wykorzystanie FIELD lub FIND_IN_SET
rob_roy
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 21.06.2011

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


Witam,

Mam problem z sortowaniem (niestandardowym).
Moje kryteria to:
-promocje (0/1)
-data (DESC)
-godzina (DESC)
-set promocje (war1,war2...,nul)

Zapytanie
  1. SELECT mid, uid, category, title, b_title, promotion, date, image_1, mid, city, promotion_c, (SELECT CASE WHEN FIND_IN_SET(promotion_c,'rybnik')=1 THEN 2 ELSE 1 END) AS sort FROM at20_adverts_norm
  2. WHERE db_data_id=1 AND publicate=1 AND category = 78 AND date<='2011-07-05' ORDER BY sort DESC, date DESC,time DESC


Wiem, nie jest to eleganckie ale tak sobie życzą i nie mam możliwości, całe szczęście że tabela niezbyt duża bo ten CASE... Heh szkoda gadać.

Powyższe zapytanie działa elegancko tak jak chce za wyjątkiem przypadku kiedy w kolumnie SET o nazwie promotion_c jest więcej niż jeden zestaw promocji np. war1, war2. Dla samego war1 działa gdy więcej nie znajduje żądanych wartości. Próbowałem też zmienić funkcję FIND_ .. na FIELD. Eksperymentowałem też z operatorami >= ale efekt mizerny.

Macie jakieś pomysły jak to usprawnić aby gdy w kolumnie SET jest więcej wartości, niezależnie od tego czy np. war1,war2,war3 będę znajdował np war2 ?

Pozdrawiam


--------------------
IF(rada===true){ pomógł++; echo 'Kliknij pomógł ^ ^';}
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




nie: =1
a: >0


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

"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
-Gość-
post
Post #3





Goście







Cytat(nospor @ 5.07.2011, 08:46:00 ) *
nie: =1
a: >0


Próbowałem. Znajdowane są tylko pojedyncze wartości zawierające szukaną wartość

FIND_IN_SET(promotion_c,'sz1') znajdzie gdy promotion_c => sz1 a gdy: promotion_c => sz1,sz2 to już nie.
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




No ale zajrzyj do manuala i zobacz w jakiej kolejności podaje się dane argumenty....
http://dev.mysql.com/doc/refman/5.0/en/str...ion_find-in-set


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

"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
-Gość-
post
Post #5





Goście







Poradziłem sobie...

Funckja FIND_IN_SET sie nie sprawdza..

Za to FIELD i użycie wartosci bitowych działa doskonale

FIELD(promotion_c,1,2,3,5,9,15)>0

Wymaga tylko binarnego przeliczenia żądanych wartosci:

np

00001 =1
00010 =2
00011 =3
00101 =5
01001 =9
01111 = 1 + 2 + 4 +8

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Się nie sprawdza, bo używasz w złej kolejności - pisałem ci o tym...

nie: FIND_IN_SET(promotion_c,'sz1') > 0
a: FIND_IN_SET('sz1',promotion_c) > 0


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

"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

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 Aktualny czas: 22.08.2025 - 01:58