MeleaMedlem sedan juli 20033 147 inlägg Okai,
Tycker detta borde funka.
select
s.sprint_id,
s.sprint_topic,
s.sprint_text,
date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
s.sprint_user_id,
s.sprint_sort_order as prio,
count(s.sprint_id) as siblings,
u.user_name
from
" . tbl_SPRINT . " s
left join
" . tbl_USER . " u on s.sprint_user_id = u.user_id
group by
s.sprint_id
order by
s.sprint_sort_order
Men counten funkar inte, varför?
Använder MySQL 5.0.41.
Ledsen för den korta tonen, suttit alldeles för länge med det här.
Tack på förhand!
MeleaMedlem sedan juli 20033 147 inlägg Tycker det här är konstigt.
Detta funkar
select
s.sprint_id,
s.sprint_topic,
s.sprint_text,
date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
s.sprint_user_id,
s.sprint_sort_order as prio,
count(s.sprint_id) as siblings,
u.user_name
from
" . tbl_SPRINT . " s
join
" . tbl_SPRINT . " s2
left join
" . tbl_USER . " u on (s.sprint_user_id = u.user_id)
group by
s.sprint_id
order by
s.sprint_sort_order
s2 gör ju ingenting, hur kan det göra någon skillnad? Förklara gärna. :)
LarsGMedlem sedan dec. 200012 464 inlägg Vad menar du med att det inte fungerar?
MeleaMedlem sedan juli 20033 147 inlägg Säg att jag har 3 poster i tabellen tbl_SPRINT, i mitt första inlägg returnerar prio endast 1, i mitt andra 3.
/r okej, rubriken på första inlägget är helt tokfel, döpte inlägget när jag hade ett annat fel, sorry för det. :)
LarsGMedlem sedan dec. 200012 464 inlägg Hur är tabellerna definierade? Vilka kolumner utgör primärnyckel? Ge exempel på datainnehåll och förväntat resultat.
MeleaMedlem sedan juli 20033 147 inlägg sprint_id - int primärnyckel
sprint_topic - varchar
sprint_text - longtext
sprint_date - datetime
sprint_user_id - int
sprint_sort_order - int
Vill hämta allt innehåll i tbl_SPRINTS, samt information om användaren genom att jämföra sprint_user_id med user_id i tbl_USER-tabellen, och jag vill att prio ska innehålla antal poster i tbl_SPRINTS.
MeleaMedlem sedan juli 20033 147 inlägg Okej, såhär ser SQL-frågan ut nu:
select
s.sprint_id,
s.sprint_topic,
s.sprint_text,
date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
s.sprint_user_id,
s.sprint_completed,
s.sprint_prio,
s.sprint_sort_order as sort_order,
count(s.sprint_id) as siblings,
u.user_name
from
" . tbl_SPRINT . " s
join
" . tbl_SPRINT . " s2
left join
" . tbl_USER . " u on s.sprint_user_id = u.user_id
where
s.sprint_completed = #
group by
s.sprint_id
order by
s.sprint_sort_order
Det jag vill få ut är alla poster i tbl_SPRINT där sprint_completed är 0, 1 eller 2, beroende på vad den får för värde. Jag vill också räkna alla poster som den skriver ut, dvs de där sprint_completed är 0, 1 eller 2.
Just nu räknar counten alla poster, oavsett vad det står i where-satsen, men den skriver ut innehållet korrekt.
LarsGMedlem sedan dec. 200012 464 inlägg prio? Menar du inte siblings?
Om vi tittar på din första fråga och bara använder kolumner sprint_id
och säger att den har följande innehåll
sprint_id
1
2
3
select sprint_id, count(sprint_id)
from tbl_Sprint
group by sprint_id
så ger det resultatet
1 1
2 1
3 1
om du har frågan
select s.sprint_id,s2.sprint_id
from tbl_Sprint s
join tbl_sprint s2
så ger det resultatet
s.sprint_id s2.sprint_id
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
eftersom du kombinerar alla poster med alla poster i de båda tabellerna.
select s.sprint_id,count(s.sprint_id)
from tbl_Sprint s
join tbl_sprint s2
group by s.sprint_id
så ger det resultatet
1 3
2 3
3 3
eftersom du har tre förekomster av varje s.sprint_id
Om du för varje rad i resultatet även vill ha totala antalet rader i tbl
så kan du skriva
select s.sprint_id,
s.sprint_topic,
s.sprint_text,
date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
s.sprint_user_id,
s.sprint_sort_order as prio,
(select count(*) from tbl_sprint) as siblings,
u.user_name
from tbl_SPRINT s
left join tbl_USER u on s.sprint_user_id = u.user_id
order by s.sprint_sort_order
Grundproblemet är att mysql's implementation av group by tillåter sqlfrågor som inte är entydiga.
MeleaMedlem sedan juli 20033 147 inlägg Du är en klippa, som alltid.
select
s.sprint_id,
s.sprint_topic,
s.sprint_text,
date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
s.sprint_user_id,
s.sprint_completed,
s.sprint_prio,
s.sprint_sort_order as sort_order,
(select count(*) from " . tbl_BACKLOG . " where backlog_completed = :backlog_completed) as siblings,
u.user_name
from
" . tbl_SPRINT . " s
left join
" . tbl_USER . " u on s.sprint_user_id = u.user_id
where
s.sprint_completed = :backlog_completed
order by
s.sprint_sort_order
Funkar klockrent! :bire