Autor Zpráva
jonge
Profil
Počítám úspěšnost, mám následující dotaz:
SELECT uzivatele.id AS `id` , uzivatele.login AS `login` , (


SELECT COUNT( * )
FROM `tipdne`
WHERE `kdo` = uzivatele.id
AND `hodnoceni` = '0'
) AS `nehodnoceno` , (

SELECT COUNT( * )
FROM `tipdne`
WHERE `kdo` = uzivatele.id
AND `hodnoceni` = '1'
) AS `spravne` , (

SELECT COUNT( * )
FROM `tipdne`
WHERE `kdo` = uzivatele.id
AND `hodnoceni` = '2'
) AS `spatne` , ROUND( (

SELECT COUNT( * )
FROM `tipdne`
WHERE `kdo` = uzivatele.id
AND `hodnoceni` = '1' ) / ( (

SELECT COUNT( * )
FROM `tipdne`
WHERE `kdo` = uzivatele.id
AND `hodnoceni` = '1' ) + (
SELECT COUNT( * )
FROM `tipdne`
WHERE `kdo` = uzivatele.id
AND `hodnoceni` = '2' )
) *100
) AS `uspesnost`
FROM `uzivatele` , `tipdne`
WHERE tipdne.kdo = uzivatele.id
GROUP BY uzivatele.login
ORDER BY `uspesnost` DESC

Je to velmi dlouhý a složitý dotaz, proto se ptám – nelze to nějak zjednodušit? Vím že tam mám mnohokrát SELECT COUNT(*) FROM `tipdne` WHERE `kdo` = uzivatele.id AND `hodnoceni` = '2', bohužel když místo toho dám např. `spatne` tak mi to vyhodí hlášku že sloupec správně neexistuje, protože ten je pouze jako alias.
djlj
Profil
Tohle:
(SELECT COUNT( * ) FROM `tipdne` WHERE `kdo` = uzivatele.id AND `hodnoceni` = '1' ) + (SELECT COUNT( * ) FROM `tipdne` WHERE `kdo` = uzivatele.id AND `hodnoceni` = '2' ) ) můžeš zkrátit na:

(SELECT COUNT( * ) FROM `tipdne` WHERE `kdo` = uzivatele.id AND (`hodnoceni` = '1' OR hodnoceni` = '2'))


A taky si dej indexy na sloupce kdo a hodnoceni.
tiso
Profil
daj sem popis tej tabuľky a čo vlastne chceš zistiť...
jonge
Profil
djlj
Díky moc.
Mám ještě jeden dotaz (myslím tím otázku) – jak se mají správně psát uvozovky u uzivatele.id apod.?
Kajman_
Profil *
`uzivatele`.`id`
Toto téma je uzamčeno. Odpověď nelze zaslat.