|
|
|
|
|
для: tAleks
(15.01.2011 в 17:27)
| | Ограничение по длине JOIN-цепочки - минимум 32, и сейчас по-моему 64.
Если в него не влезть, или запрос становится слишком тяжелым,
то выдаются отдельные запросы на каждый месяц.
Они и строятся проще и обрабатываются быстрее. | |
|
|
|
|
|
|
|
для: cheops
(15.01.2011 в 16:48)
| | Всем спасибо за все ответы и помощь.
Еще вот такой вопрос.
Если типов будет не 2, а к примеру 10 или 20, и нужно будет выдать широкую таблицу со всеми 10 или 20 колонками, такой способ ведь уже не подойдет. Как в таком случае можно будет реализовать задуманное? | |
|
|
|
|
|
|
|
для: tAleks
(15.01.2011 в 16:33)
| | В данном случае, вероятно привести нельзя, так как изначально все вертится вокруг дат, которые жестко диктуются первой таблицей и через которые связаны все генерируемые таблицы. А вот если бы в одном из случаев условие USING() или ON() вообще не использовались бы, тогда бы в результирующую таблицу вывалилось бы полное декартово произведение. Чтобы исключить дублирующие строки пришлось бы использовать GROUP BY. | |
|
|
|
|
|
|
|
для: tAleks
(15.01.2011 в 12:14)
| | Лишний, конечно.
скопипастил, не посмотрев. | |
|
|
|
|
|
|
|
для: cheops
(15.01.2011 в 12:40)
| | Например?
Приведите пожалуйста пример, когда в данном случае без GROUP BY было бы не обойтись.
Спасибо. | |
|
|
|
|
|
|
|
для: tAleks
(15.01.2011 в 12:14)
| | Для подстраховки, да, здесь можно обойтись. Но если бы в условии USING() было другое условие, то без GROUP BY было бы не обойтись. | |
|
|
|
|
|
|
|
для: cheops
(14.01.2011 в 23:52)
| | Понял. Спасибо!
Еще вопрос. Если типов будет не 2, а к примеру 10 или 20, и нужно будет выдать широкую таблицу со всеми 10 или 20 колонками, такой способ ведь уже не подойдет. Как в таком случае можно будет реализовать задуманное? | |
|
|
|
|
|
|
|
для: Trianon
(14.01.2011 в 23:47)
| | А зачем в результирующей таблице "GROUP BY m.date"? Без него можно обойтись? | |
|
|
|
|
|
|
|
для: tAleks
(14.01.2011 в 23:32)
| | Все верно, так как personal.date не везде есть, нужно использовать значение из первой таблицы с месяцами. | |
|
|
|
|
|
|
|
для: cheops
(14.01.2011 в 23:18)
| |
SELECT
m.date,
personal.volume AS p_volume,
organization.volume AS o_volume
FROM
(
SELECT DISTINCT DATE_FORMAT(date_order, '%Y-%m') AS date
FROM users_orders
WHERE id_user = 1134
) AS m
LEFT JOIN (
SELECT
DATE_FORMAT(date_order, '%Y-%m') AS date,
SUM(volume) AS volume
FROM users_orders
WHERE id_user = 1134
AND type = 'personal'
GROUP BY date
) AS personal ON m.date = personal.date
LEFT JOIN (
SELECT
DATE_FORMAT(date_order, '%Y-%m') AS date,
SUM(volume) AS volume
FROM users_orders
WHERE id_user = 1134
AND type = 'organization'
GROUP BY date
) AS organization ON m.date = organization.date
GROUP BY m.date
ORDER BY m.date
|
Так наверное будет лучше.
USING - материя достаточно тонкая. | |
|
|
|
|