När jag skriver så här så dras inte alla problemID bort. Bara en om det finns någon. Hur skriver man för att den ska räkna med alla?
SELECT placering, count( * ) AS antal
FROM resultat r, lopp l
INNER JOIN starta s ON s.loppID = r.loppID AND r.loppID = l.loppID
WHERE s.stallID =$stallID and typID <5
AND problemID != 9
GROUP BY placering
ProblemID 9 är strukna lopp och ska inte räknas in i antalet sprungna lopp utan resultat, där de nu räknas in. Så om en häst strukits 2 gånger så räknas bara en gång bort som jag skrivit det nu.
Är det inte så att du får ut en kryssprodukt av resultat och lopp med ovanstående fråga? Kanske skulle du ha
SELECT placering, count( * ) AS antal
FROM resultat r, lopp l, starta s
WHERE s.loppid = r.loppid AND r.loppid = l.loppid
AND s.stallID =$stallID and typID <5 and problemID <> 9
GROUP BY placering
Det ser inte ut att vara något fel på sql-frågan.
Men den kan vara fel i datat.
Eftersom loppid är auto_increment i alla tabeller så blir det lätt missmatch.
Ja jag tänkte på det också när jag såg tabellerna så här efter sig. men eftersom loppen matas in efterhand som de ska springas så har det aldrig blivit något fel när det gäller det. Varje tabell har fått rätt ID. Men den räknar inte bort de rader där problemID 9 finns med, mer än en rad. Varför?
Du måste joina alla tre tabellerna. Testa följande:
SELECT placering, count( * ) AS antal
FROM (resultat r INNER JOIN lopp l ON r.loppID = l.loppID)
INNER JOIN starta s ON s.loppID = r.loppID
WHERE s.stallID =$stallID and typID <5
AND problemID <> 9
GROUP BY placering
Men... har du ändrat strukturen? Resultat borde ha ett stallid också! Och då blir det:
SELECT placering, count( * ) AS antal
FROM (resultat r INNER JOIN lopp l ON r.loppID = l.loppID)
INNER JOIN starta s ON s.loppID = r.loppID AND s.stallID = r.loppID
WHERE s.stallID =$stallID and typID <5
AND problemID <> 9
GROUP BY placering
SELECT placering, count( * ) AS antal
FROM resultat r, lopp l,starta s
WHERE r.loppID = l.loppID AND s.loppID = r.loppID AND s.stallID =$stallID and typID <5
AND problemID <> 9
GROUP BY placering
Om stallID finns i resultat lägg med "AND s.stallID =r.stallID " i where satsen.
Det är som förut, bara ett struket lopp som räknas bort...
Nåja, nu måste jag återlämna datorn till ägaren. Återkommer kanske senare i kväll om jag får tillgång till någon... Tack så här långt...
146 ms totalt · 3 externa anrop · v20260731065814-full.19008ce9