Mysql: таблица, объединенная по порядку

#mysql

#mysql

Вопрос:

 RIGHT JOIN (SELECT * FROM images ORDER BY image_id) AS `i` ON i.ad_id = a.id
  

Как упорядочить объединенную таблицу без использования временной таблицы? 🙂

Потому что это в 5 раз медленнее, чем простое объединение:

 RIGHT JOIN images AS `i` ON i.ad_id = a.id
  

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

Спасибо 😉

Обновить

 SELECT a.id, GROUP_CONCAT(image_id) AS `image_ids`
FROM `ads` AS `a`
RIGHT JOIN (SELECT * FROM images ORDER BY image_id) AS `i` ON i.ad_id = a.id
GROUP BY `a`.`id`
ORDER BY `a`.`id` DESC
  

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

 group_concat(image_id)
  

Ответ №1:

Упорядочить по image_id после объединения.

(У вас ведь есть индекс на image_id, не так ли?)

Обновить:

Вы можете поместить ORDER BY внутри вашего GROUP_CONCAT :

 GROUP_CONCAT(image_id ORDER BY image_id)
  

и тогда вам не нужен подзапрос.

Комментарии:

1. 🙂 не решение. Порядок должен использоваться для другого поля таблицы.

2. Конечно, у первичного ключа и ad_id также есть индекс.

3. Круто! Я этого не знал! Спасибо, приятель. 1 🙂

4. Рад помочь. И я только что получил новую привилегию … ура!

5. Rofl: D Баааах! Решение работает, но я только что заметил, что оно не упорядочивает остальные поля GROUP_CONCAT. Мне нужно использовать это в каждом поле. В любом случае, ладно 🙂

Ответ №2:

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

Комментарии:

1. из-за group_concat(i.image_id) 🙂 Внутри объединенной таблицы несколько строк

2. @Beck: Тогда, возможно, вам следует опубликовать весь запрос.

3. Конечно, извините, это моя лень и дурная привычка. Минуточку.

4. @Beck: У меня здесь нет MySQL для тестирования, но вы пробовали добавить третий внешний запрос, который просто выполняет group_concat и упорядочивает результат вашего текущего внешнего запроса (за вычетом группировки и упорядочивания, конечно)?

5. Пожалуйста, добавьте пример измененного запроса, и я запущу его здесь. 🙂