webForumDet fria alternativet

två count?

13 svar · 509 visningar · startad av tanten

tantenMedlem sedan nov. 20051 596 inlägg
#1

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
aasahMedlem sedan mars 20034 471 inlägg
#2

Jag är rädd att jag inte förstår frågan. Vad vill du åstadkomma?

tantenMedlem sedan nov. 20051 596 inlägg
#3

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.

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Ä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
tantenMedlem sedan nov. 20051 596 inlägg
#5

Peter S...
Jag testade men det blir fortfarande bara en av strykningarna som dras bort.
:-(

yohpopsMedlem sedan feb. 20011 198 inlägg
#6

Vilket fält finns i vilken tabell?

tantenMedlem sedan nov. 20051 596 inlägg
#7

De ttre inblandade tabellerna ser ut så här

  resultat (
  loppID int(11) NOT NULL auto_increment,
  placering int(11) NOT NULL default '0',
  problemID int(2) default '1',
  prisSumma int(11) default '0',
  tid decimal(3,1) default '0.0',
  kommentar text

  lopp (
  loppID int(11) NOT NULL auto_increment,
  banID int(11) NOT NULL default '0',
  datum date NOT NULL default '0000-00-00',
  loppNr varchar(11) default '0',
  typID int(11) default '0' 

starta (
  loppID int(11) NOT NULL auto_increment,
  stallID int(11) NOT NULL default '0',
  stracka int(11) NOT NULL default '0',
  sparNr int(11) NOT NULL default '0',
  kuskID int(11) NOT NULL default '0',
  (
yohpopsMedlem sedan feb. 20011 198 inlägg
#8

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.

tantenMedlem sedan nov. 20051 596 inlägg
#9

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?

yohpopsMedlem sedan feb. 20011 198 inlägg
#10

Testa att skriva ut fälten istället för att räkna och se vad du får träff på.

aasahMedlem sedan mars 20034 471 inlägg
#11

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
tantenMedlem sedan nov. 20051 596 inlägg
#12

Jag testade bägge dina förslag aasah men då försvann alla resultat. Ska se om jag kan se varför.
Lade upp en tillfällig sida här http://gotlandssidor.se/simstall/hasten.php?hid=2
riktiga sidan http://gotlandssidor.se/simstall/hast.php?hid=2
Där står 4 oplacerade lopp, ska bara vara 2

aasahMedlem sedan mars 20034 471 inlägg
#13

Hjälper detta:

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.

tantenMedlem sedan nov. 20051 596 inlägg
#14

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...

132 ms totalt · 3 externa anrop · v20260731065814-full.91fd2ad2
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)