Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Order by po trzech kolumnach - czy ja już do reszty zdurniałem?
c2h5oh
post
Post #1





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

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


Pomijając kwestię czy jest to rozsądne potrzebuje w jednym miejscu posortować wyniki selecta po trzech kolumnach:
Kod
SELECT * FROM `table` ORDER BY col1 DESC, col2 ASC, col3 DESC LIMIT 0,10

lub coś zbliżonego

niestety sortuje tylko po col1 i col2 - col3 zlewa zupełnie. Ograniczenie mysql 4.1, czy co? nie znalazłem w sieci ani jednego przykładu na order by z 3 kolumnami..

Wszelkie sugestie mile widziane.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
c2h5oh
post
Post #2





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

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


Oczywiście jest "nieco" bardziej skomplikowane, ale do tego się sprowadza

  1. CREATE TABLE `product_tag` (
  2. `tid` int(10) UNSIGNED NOT NULL DEFAULT '',
  3. `pid` int(10) UNSIGNED NOT NULL DEFAULT '',
  4. KEY `pid` (`pid`),
  5. KEY `tid` (`tid`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  7.  
  8. CREATE TABLE `product` (
  9. `pid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  10. `status` int(2) UNSIGNED NOT NULL DEFAULT '0',
  11. PRIMARY KEY (`pid`),
  12. KEY `search` (`pid`,`status`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8

Powycinałem kolumny nie wykorzystywane w zapytaniu, żeby bałaganu nie wprowadzać
  1. SELECT p.*, COUNT(t.tid) AS matches FROM `product` p
  2. INNER JOIN `product_tag` t ON p.pid=t.pid WHERE ( (`tid` IN (val1, val2, val3,..)) AND (p.status>=jakis_status))
  3. GROUP BY t.pid ORDER BY matches DESC, p.STATUS ASC, p.pid DESC LIMIT 0, 10


Sortowanie po dowolnych 2 z tych 3 działa - nie ma problemu status+pid, matches+status, matches+pid, wszystkie trzy niestety już nie.

Ten post edytował DeyV 17.12.2007, 23:33:48
Powód edycji: formatowanie kodu
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: 27.09.2025 - 02:49