Autor | Zpráva | ||
---|---|---|---|
djlj Profil |
#1 · Zasláno: 15. 2. 2007, 21:34:36 · Upravil/a: djlj
Zdravím,
mám „problém“ s GROUP BY a nevím, jak na něj. Používám například následující konstrukci: SELECT title, text FROM clanky WHERE MATCH (title) AGAINST ('".$hledat."' IN BOOLEAN MODE) OR MATCH (text) AGAINST ('".$hledat."' IN BOOLEAN MODE) GROUP BY sekce_id ORDER BY 3 * MATCH (title) AGAINST ('".$hledat."') + MATCH (text) AGAINST ('".$hledat."') DESC a chci vypsat z každé sekce JEN jeden výsledek. To tedy řeším GROUPnutím na sekce_id, nicméně to přináší problém, že se nevybere nejrelativnější výsledek, ale jen ten, který byl s hledaným obsahem vložen do databáze jako první. Jak to tedy jednoduše obejít tak, abych zobrazil z každé sekce jen jeden výsledek, a to ten nejrelevantnější? |
||
Kajman_ Profil * |
#2 · Zasláno: 15. 2. 2007, 21:54:54
Co to negroupovat, ale seřadit podle sekce, matche a v aplikaci vypsat z kazde sekce jen prvni?
|
||
djlj Profil |
#3 · Zasláno: 15. 2. 2007, 22:56:34
Dík za odpověď.
Jenže při stovkách výsledků je celkem zbytečně vybírat z databáze položky, které nebudu potřebovat… Jinak to opravdu vyřešit nejde? :( |
||
Kajman_ Profil * |
#4 · Zasláno: 16. 2. 2007, 08:50:13
Obecné ukázky jsou tu...
http://dev.mysql.com/doc/refman/4.1/en/example-maximum-column-group-ro w.html ...ale v kombinaci s match to asi nebude nejrychlejší. |
||
Časová prodleva: 5 dní
|
|||
djlj Profil |
#5 · Zasláno: 20. 2. 2007, 22:06:50
Zkouším to nějak sesmolit podle toho, ale funguje to (fulltext) prapodivně. Každopádně díky za odpovědi ;).
|
||
Časová prodleva: 10 dní
|
|||
djlj Profil |
#6 · Zasláno: 2. 3. 2007, 17:23:15
Tak jsem to nakonec vyřešil. Kdyby to někdo někdy potřebovat a hledal, tak:
SELECT title, text FROM clanky WHERE (MATCH (title) AGAINST ('".$hledat."' IN BOOLEAN MODE) OR MATCH (text) AGAINST ('".$hledat."' IN BOOLEAN MODE)) AND id = (SELECT id FROM clanky c WHERE c.sekce_id = clanky.id AND (MATCH (title) AGAINST ('".$hledat."' IN BOOLEAN MODE) OR MATCH (text) AGAINST ('".$hledat."' IN BOOLEAN MODE)) ORDER BY 3 * MATCH (title) AGAINST ('".$hledat."') + MATCH (text) AGAINST ('".$hledat."') DESC LIMIT 1) GROUP BY sekce_id |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0