MySQL: лучший способ объединить несколько выборок MAX () с массивом? - PullRequest
0 голосов
/ 14 марта 2012

Я надеюсь, что кто-то может дать мне общее руководство по этой проблеме:

Отправной точкой является массив идентификаторов записей в БД.

array ids = [45,23,14,7];

В этих записях есть несколько столбцов, например

id,price,rating
7,$5.00,5
14,$2.00,4
23,$5.00,2
45,$5.00,5

. Что мне нужно, так это

  1. предметов с максимальной (ценой) (или чем-то эквивалентным).
  2. , если существует более одного предмета с одинаковой ценой, получите предметы с максимальным (рейтингом) (или чем-то эквивалентным).
  3. Наконец, если еще имеется более одного предмета, возьмите тот, который стоит первым в массиве.

Я особенно застрял в пункте 3. Есть ли способ сделать это в (My) SQL, или долженЯ делаю это в коде?

Спасибо за чтение.

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

Примерно так должно работать:

SELECT * FROM table WHERE id IN (45,23,14,7) ORDER BY price DESC, rating DESC LIMIT 1
1 голос
/ 14 марта 2012

В дополнение к ответу @jasonlfunk вы можете добавить дополнительное предложение порядка, чтобы учесть и ваш массив:

SELECT * FROM table WHERE id IN (45,23,14,7) ORDER BY price DESC, rating DESC, FIELD(id,45,23,14,7) ASC LIMIT 1
0 голосов
/ 14 марта 2012

... Я думаю о вашей точке 3 .. это должно быть сделано в коде, результат mysql не обязательно возвращает результаты в заказе или массиве, если применять заказ по цене, то по рейтингу все равно возвращается более одного item ваш код должен иметь возможность получать список вместо одной строки, а затем производить сравнение в коде.

...