Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

сама задача состоит в том что бы получить из таблицы записи сгруппированные по телефону (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 , сделайте по аналогии со вторым вариантом, должно ускорить ваш запрос.

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.