powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / данные из одной таблицы надо сформатировать в 3 разных вида
12 сообщений из 37, страница 2 из 2
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062328
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Что касается НЕНАДЁЖНЫХ, то именно выделенное является недостатком UNION, потому что все UNION должны иметь одинаковое кол-во столбов.
То что вы выделили я как раз не использую, оно там ради того, чтобы работало то, что НЕ выделено ;)
Другого способа не нашёл...У UNION не бывает ненадежных результатов, в отличие от GROUP BY.
В полях `l` (во всех трех частях) и `money` (в первой части) в результате запроса может быть мусор.
Кстати, почему в двух часть запроса `summ` AS `money`, а в третьей SUM(`summ`) AS `money` ?
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062395
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttip78Что касается НЕНАДЁЖНЫХ, то именно выделенное является недостатком UNION, потому что все UNION должны иметь одинаковое кол-во столбов.
То что вы выделили я как раз не использую, оно там ради того, чтобы работало то, что НЕ выделено ;)
Другого способа не нашёл...
У UNION не бывает ненадежных результатов, в отличие от GROUP BY.
В полях `l` (во всех трех частях) и `money` (в первой части) в результате запроса может быть мусор.
Кстати, почему в двух часть запроса `summ` AS `money`, а в третьей SUM(`summ`) AS `money` ?

потому что я использую только последний, а из первых двух - нет
я же говорю: я не использую этот мусор в тех отмеченных местах, там `l` и `summ` только для того, чтобы кол-во столбов совпало с остальными UNION
в коде он НЕ используется
"ненадёжный" это не мой термин, а товарища выше
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062398
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttip78одно дело, когда БД будет группировать/складывать, а другое - когда ПХП
нифига они не "абсолютно одинаковы", потому что движки разные и подходы
в пхп это ассоциативный массив группирует значения по датам
возможно всё это экономия на спичках, по идее в БД всё это быстрее сделать

переформулирую вопрос: этот запрос оптимален?
Я не понял, причем тут ассоциативный массив. Но если выборка велика (десятки тысяч записей и более), то с точки зрения MySQL быстрее выполнить три отдельных запроса, нежели их объединение с помощью UNION ALL (речь не идет про простой UNION). Поэтому если PHP-код просто линейно выводит данные куда-то или работает всегда только с текущей записью, то выгоднее выполнить три отдельных запроса.

при том, что во всех 3х UNION используется одна и та же таблица
вместо этого я могу сделать 1 SELECT, потом через ПХП сгруппировать по дате все данные в хэш-массиве, просуммировать и разложить в таблице, как мне надо
это будет 1 запрос, но нагрузка переместится на скрипт
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062409
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78потому что я использую только последний, а из первых двух - нет
я же говорю: я не использую этот мусор в тех отмеченных местах, там `l` и `summ` только для того, чтобы кол-во столбов совпало с остальными UNION
в коде он НЕ используется Тогда стоит убрать поле `l` из SELECT-а, а в тех местах, где `money` не используется, вписать, например, 0. И MySQL-ю чуток полегче будет, и сопровождаемость повысится.

Кстати, если я ничего не путаю, то можно переписать запрос так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
(SELECT DATE_FORMAT(`added`,'%Y-%m-%d') AS `period`,
  SUM(`l`=0) AS `count1`,
  SUM(`l`<>0 AND `summ`=0) AS count2,
  SUM(`l`<>0 AND `summ`>0) AS count3,
  SUM(IF(`l`<>0 AND `summ`>0,`summ`,0)) AS `money`
FROM `refs`
WHERE `ref`=401390
GROUP BY `period` DESC
LIMIT 32
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062411
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по конретному `ref` отбирается очень много записей, то имеет смысл в WHERE сделать дополнительный фильтр по дате, это будет быстрее, чем LIMIT.
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062474
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftКстати, если я ничего не путаю, то можно переписать запрос так:

вот! Я знал, что нет предела совершенству.
спасибо

miksoftЕсли по конретному `ref` отбирается очень много записей, то имеет смысл в WHERE сделать дополнительный фильтр по дате, это будет быстрее, чем LIMIT.

мне нужно именно 32 строчки выдать...
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062479
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть какой-то способ из int-полей БД выводить в пхп не 0, а сразу '' (пустышку) ?
а то каждую ячейку проверять приходится
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062497
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78miksoftЕсли по конретному `ref` отбирается очень много записей, то имеет смысл в WHERE сделать дополнительный фильтр по дате, это будет быстрее, чем LIMIT.мне нужно именно 32 строчки выдать...Это никак не противоречит моему предложению.
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062498
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78есть какой-то способ из int-полей БД выводить в пхп не 0, а сразу '' (пустышку) ?
а то каждую ячейку проверять приходитсяМожно точно так же проверять в MySQL - IF(field<>0, field, NULL)
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062554
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttip78пропущено...
мне нужно именно 32 строчки выдать...Это никак не противоречит моему предложению.

в смысле сделать WHERE `added` IN (...) ?
я не знаю всех дат, они идут не подряд
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062567
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78miksoftпропущено...
Это никак не противоречит моему предложению.

в смысле сделать WHERE `added` IN (...) ?
я не знаю всех дат, они идут не подряд
В смысле сделать WHERE `added` > сегодня - 60 дней
Если, конечно, запас можно хоть как-то прогнозировать.
...
Рейтинг: 0 / 0
данные из одной таблицы надо сформатировать в 3 разных вида
    #39062589
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ смысле сделать WHERE `added` > сегодня - 60 дней
Если, конечно, запас можно хоть как-то прогнозировать.
не, это вообще не вариант
суть - вывести именно 99 последних записей, а не дней
там могут быть пробелы
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / данные из одной таблицы надо сформатировать в 3 разных вида
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]