Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Прошу помощи в составлении запроса mysql


 Поделиться

Рекомендованные сообщения

Добрый день, столкнулся с задачей, выборки данных из таблицы в бд

сама задача состоит в том что бы получить из таблицы записи сгруппированные по телефону (phone), но перед этим отсортированные по дате (datetime DESC), при этом с лимитом в 200 записей (LIMIT 0,200)

прошу помочь понять, как можно сформировать запрос к бд, дабы не нагружать сильно бд, и выполнить все условия.

Или может быть я ошибаюсь, и конечную сортировку лучше делать на php?

пробовал запросом 

SELECT sends.* FROM (SELECT * FROM `oc_watsappchat_send` WHERE creator="" ORDER BY `id` DESC) as sends GROUP BY sends.phone ORDER BY `id` DESC LIMIT 0,200

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

Изменено пользователем Tinyled
Ссылка на комментарий
Поделиться на других сайтах


У вас дважды выполняется сортировка по id, а вы вроди собирались сортировать по дате
И вообще внутренний SELECT лишний, условие можно перенести во внешний SELECT 

Ссылка на комментарий
Поделиться на других сайтах


6 минут назад, shalan сказал:

У вас дважды выполняется сортировка по id, а вы вроди собирались сортировать по дате
И вообще внутренний SELECT лишний, условие можно перенести во внешний SELECT 

да, не то скопипастил по id тоже можно сортировать, поскольку новому сообщению присваивается новый id также поле id является AUTO_INCREMENT

сначала уперся в сортировку именно по дате, но потом понял что можно и по id

Изменено пользователем Tinyled
Ссылка на комментарий
Поделиться на других сайтах


7 минут назад, shalan сказал:

И вообще внутренний SELECT лишний, условие можно перенести во внешний SELECT 

пытался это сделать но к сожалению все попытки заканчивались ошибкой синтаксиса

Ссылка на комментарий
Поделиться на других сайтах


@Tinyled , раз, два. Учитесь (хотя бы на SO).

 

P.S. без подзапроса не обойтись.

Ссылка на комментарий
Поделиться на других сайтах

35 минут назад, shalan сказал:

SELECT * FROM `oc_watsappchat_send` WHERE creator="" GROUP BY phone ORDER BY `id` DESC LIMIT 0,200

Так пробовали

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

Ссылка на комментарий
Поделиться на других сайтах


25 минут назад, SooR сказал:

@Tinyled , раз, два. Учитесь (хотя бы на SO).

 

P.S. без подзапроса не обойтись.

 

уточните пожалуйста чем мой запрос отличается от тех что в предложенных вами ссылках?

Мой запрос работает, и работает так как необходимо, за исключением того что неудовлетворительное время на обработку запроса, при количестве записей в 2.6к  составляет 0.0738 секунд

Ссылка на комментарий
Поделиться на других сайтах


@Tinyled , сделайте по аналогии со вторым вариантом, должно ускорить ваш запрос.

 

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.