2015-09-01 2 views
0

Я надеюсь, что вы можете помочь мне с моим запросом и отображением результатов во время цикла.Получить записи для каждой группы сгруппированных результатов

Я наткнулся на несколько похожих вопросов, таких как this one, и хотя это вроде ответов на мой вопрос, это тоже не так.

У меня есть следующий запрос:

(SELECT dt_id, DATE_FORMAT(dt_date, '%m-%d-%Y') as dt_date, 
     dt_data, dt_bodypart, dt_wktype, dt_wkurl, dt_year, 
     COUNT(*) as Total 
FROM data 
WHERE dt_year = '2015' 
    and dt_username_member = 'admin' 
GROUP BY dt_date 
ORDER BY dt_date DESC 
LIMIT 0,100) 
ORDER BY dt_date ASC 

который отображает строки по дате и сгруппировать их по дате, а так как мой массив, который обрабатывает результаты не может отображать более 1 результатов в календаре, если же дата появляется дважды. Я также подсчитываю, сколько записей для каждой даты.

я на самом деле может сделать его работу, как мне нравится, выполнив запрос внутри цикла While (который является плохой практикой), но я хотел бы избежать этого и сделать это более эффективным и лучшим способом

Может «т работать с результатами, как этот, как мой массив будет отображать только один результат на странице календаря (последний добавлен к БД):

array { 
'08-26-2015' : 'something', 
'08-26-2015' : 'something else', 
'08-27-2015' : 'else', 
} 

в настоящее время я это, но я бегу запрос в то время как цикл, если счетчик записей для этой даты> 1, и я хотел бы достичь этого же результата, но без выполнения запроса для r с подсчетом> 1 внутри петли while

array { 
'08-26-2015' : 'something, something else', 
'08-27-2015' : 'else', 
} 
+0

Действительно ли это DISTINCT? (Меня смущает ...) – jarlh

+0

Наверное, нет. Я исправил запрос. Благодаря! – vpetkovic

ответ

0

После некоторого рытья я нашел решение. Я придумал запрос, который будет получать все результаты без необходимости запускать запросы внутри цикла while, чтобы получить всю информацию за каждый день. Вот запрос:

(SELECT DATE_FORMAT(dt_date, '%m-%d-%Y') dt_date, 
count(dt_date) as date_count, 
GROUP_CONCAT(dt_data ORDER by dt_date SEPARATOR '>>') dt_data, 
GROUP_CONCAT(dt_bodypart ORDER by dt_date SEPARATOR '>>') dt_bodypart, 
GROUP_CONCAT(dt_wktype ORDER by dt_date SEPARATOR '>>') dt_wktype, 
GROUP_CONCAT(dt_wkurl ORDER by dt_date SEPARATOR '>>') dt_wkurl 
FROM data 
WHERE dt_username_member = 'admin' and dt_year = '2015' 
GROUP BY dt_date ORDER BY dt_date ASC) ORDER BY dt_date ASC 

Это будет запрос группы всей информации в строку, которая соответствует конкретный день так же, как это:

dt_date  | dt_data     | 
------------------------------------------ 
2015-09-03 | something>>something else | 

Таким образом, все, что нужно сделать после того, как это, чтобы взорвать dt_data и вы будете ,

Смежные вопросы