5 таблиц -> Отображение определенных отдельных строк - PullRequest
0 голосов
/ 23 августа 2011

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

Мой выбранный код:

SELECT w.event,
       w.city,
       w.DATE,
       a.TIME,
       w.tmc,
       a.weather,
       a.surface_temperature,
       p.top,
       p.LEFT
FROM   weather w
       LEFT OUTER JOIN application a
         ON a.DATE = w.DATE
            AND a.tmc = w.tmc
       LEFT OUTER JOIN pinlocations p
         ON w.city = p.cityname
WHERE  w.DATE = '" & datepicker_value.Text & "'
       AND w.TIME LIKE '" & eventTime.SelectedItem.Value & "'  

У меня есть карта, на которой я размещаю булавки на основе p.top и p.left. Когда я нажимаю на это, я хочу отобразить название города, tmc, а затем под этим всю другую информацию, основанную на отфильтрованном поиске. В приведенном выше примере он создает контакты поверх выводов, создавая новые для каждого поля, я хочу, чтобы они были различны.

Я знаю, что отдельная команда существует, но не знаю, как ее использовать в этой ситуации.

Спасибо!

1 Ответ

1 голос
/ 23 августа 2011

Используйте модификатор group by для значений, которые вы хотите различить.
Затем используйте group_concat для значений, которые вы хотите указать в списке через запятую.

SELECT group_concat(w.event) as events,
       group_concat(w.city) as cities,
       group_concat(w.`DATE`) as dates,
       group_concat(a.`TIME`) as times,
       group_concat(w.tmc) as tmcs,
       group_concat(a.weather) as weathers,
       group_concat(a.surface_temperature) as temperatures,
       p.top,
       p.LEFT
FROM   weather w
       LEFT OUTER JOIN application a
         ON a.DATE = w.DATE
            AND a.tmc = w.tmc
       LEFT OUTER JOIN pinlocations p
         ON w.city = p.cityname
WHERE  w.DATE = '" & datepicker_value.Text & "'
       AND w.TIME LIKE '" & eventTime.SelectedItem.Value & "'  
GROUP BY p.top, p.left

Если левая верхняя координата когда-либо связывается только с одним городом (как и следовало ожидать) , нет необходимости помещать ее в оператор group_concat. MySQL также не требует, чтобы вы указали это в предложении group by.

См:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

*) вы можете заставить MySQL применять строгую группу по правилам, но по умолчанию она отключена.

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

...