Autor Zpráva
3wl4k
Profil *
V mojom projekte mam tabulku uzivatelov, ktory mozu mat "statusy", tieto statusy su bud automaticke, alebo manualne (automaticke priradene rucne, automaticke, podla "bodov")
Tabulky:

statusy_atomaticke:
int potrebne_body
varchar( 255) text

statusy_rucne:
int id
varchar( 255)

uzivatelia:
int id
int status_id NULL
int body

A vyberam z toho asi nejakym takymto query:

SELECT `uzivatelia`.*, IF( `uzivatelia.`status_id` IS NULL, `statusy_automaticke`.`text`, `statusy_rucne`.`text`) AS `status_text`
FROM `uzivatelia`
LEFT JOIN `statusy_rucne` ON `statusy_rune`.`id` = `uzivatelia`.`status_id`
INNER JOIN `statusy_automaticke` ON `statusy_automaticke`.`potrebne_body` <= `uzivatelia`.`body`
WHERE `uzivatelia`.`id` = ...
ORDER BY `statusy_automaticke`.`potrebne_body`
LIMIT 1


Ale dost pochybujem o vykonnosti toho riesenia a okrem toho sa mi zda dost bordel vybrat vsetky "hodnotenie" a potom ich zatriedit a vybrat to jedno...

Nejake napady ako to zoptimalizovat?
nightfish
Profil
Nejake napady ako to zoptimalizovat?
pokud nenapíšeš, čeho chceš dosáhnout, tak dost těžko
3wl4k
Profil *
Najradsej by som joinoval len jednu tabulku podla hodnoty toho status_id (ale stale jednym query) a ked pripajam automaticky status, tak pripojit len jeden a to ten s najvacsim "points"

nativne by to bolo takto (ale sql to zatrhne):
INNER JOIN `statusy_automaticke` ON `statusy_automaticke`.`potrebne_body` <= `uzivatelia`.`body` AND

`statusy_automaticke`.`potrbne_body` = MAX(`statusy_automaticke`.`potrbne_body`)


inymi slovami riadok s najvacsim id mensim nez `uzivatelia`.`body`
nightfish
Profil
3wl4k
napiš, čeho chceš dosáhnout, ne jak toho chceš dosáhnout
i když mám pocit, že začínám trochu rozumět, a že bych zvolil jiné databázové schéma
3wl4k
Profil *
Napadom sa nebranim, takyto problem som neriesil... pointa je taka, ze chcem dat aminovi na webe moznost dat "specialny" status ludom, ktorym veria a pre ostatncyh nechat len nejaky "zrozumitelny" na zaklade ziskanych bodov (napr. "zaciatocnik, expert, pokrocily....")
Kajman_
Profil *
A takhle nějak by to nešlo?
select u.*, (select a.text from statusy_automaticke a where u.body>=a.potrebne_body order by a.potrebne_body order desc limit 1) from uzivatelia u

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0