Всем доброго времени суток! Есть два запроса: 1: PHP: SELECT date, name, SUM(summa) FROM table1 GROUP BY date, name 2: PHP: SELECT date, name, SUM(p_summa) FROM table2 GROUP BY date, name Мне надо их объединить по горизонтальному. Без привязки друг к другу. Если на первой таблице 10 строк и на второй таблице 5, то в итоговой таблице 10 строк должно быть. Если на первой таблице 5 и на второй таблице 10 строк, то то в итоговой таблице 10 строк должно быть. Спасибо!
новое какое-то понятие - "объединить по горизонтальному" Имеется ввиду - объединить два результата и выдать только 10? Код (Text): SELECT * FROM ((запрос 1) UNION (запрос 2)) LIMIT 10
Лучше всего: сделать два запроса и объединить на стороне клиента. п.с. Можно и SQL-запросом, но это менее эффективно.
3-и temporary tables + Using filesort. Хуже - в общем случае. На малом количестве записей разницы не будет практически. Может даже наоборот. Запрос будет что-то вроде: PHP: select date, name, max(s1) s1, max(s2) s2 from ((SELECT date, name, SUM(summa) s1, null s2 FROM table1 GROUP BY date, name) union all (SELECT date, name, null, SUM(p_summa) FROM table2 GROUP BY date, name)) t group by date, name --- Добавлено --- п.с. Кстати, этот запрос не полностью выполняет условия ТС. В реальности будет ещё сложнее.
не знаю, откуда такие домыслы.... откуда в итоговом взялись max, зачем s, null и группировки непонятно... в исходном задании ТС ничего такого не говорил... и запросы у него другие.... насчет того что запрос сложнее - само собой но если делать два - то выборка по (1 табл + filesort) * 2 плюс наклакдные расходы для отправки запроса, приема результата * 2, + время работы пыхо скрипта, который массивы будет объединять а вообще не зная задачу полностью. тут пыжимся, возможно БД спроектирована неверно, и вообще все в одной таблице может быть, либо связи меж таблицами есть )))
@Искандар, желания не могут возникать с потолка, точнее могут, но про это моё предыдущее сообщение. Прежде чем лезть в программирование, необходимо научиться грамотно ставить перед собой задачу. Этого невозможно достичь не обладая хотяб базовыми знаниями.
Хорошо. Я Вас понял. Но мне очень сложно задать вопрос на русском, так как я боюсь допустить грамматические ошибки...
@Искандар, грамматические ошибки не страшно, мы же не на форуме "грамматики русского языка" А вот чтение книг по программированию на любом удобном для тебя языке никто не отменял. А код он и в африке код.
>> откуда в итоговом взялись max, Надеюсь, это риторический вопрос. Ибо ты знаешь работу запроса с group by. >> зачем s, null и группировки непонятно... Ты знаешь как сделать по другому? Предложи, а я поучусь. Учиться не вредно... >> в исходном задании ТС ничего такого не говорил... Говорил. Условие "по горизонтальному" - насколько я понимаю его мысль, требуется значения обоих sum() в одной строке. >> и запросы у него другие.... Идентичные. >> насчет того что запрос сложнее - само собой но если делать два - то выборка по (1 табл + filesort) * 2 плюс наклакдные расходы для отправки запроса, приема результата * 2, + время работы пыхо скрипта, который массивы будет объединять<< Повторюсь, на малых данных (десятки-сотни, может тысячи) разницы не будет. Больше - надо проверять. Проще потому, что там ещё есть условие "5+10 -> 10", "10+5 -> 10". Попробуй сделать это в одном запросе, потом расскажешь. (с учётом, что 5,10 это абстрактные цифры, для примера) Это само собой, но почему бы не потренировать мозги, задачка то любопытная.
у...... судя по таблицам, я думаю БД неверно спланирована нужно разбираться почему две таблицы, почему так объединять итд