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.
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. :)
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.
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.
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.
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
138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17