sql, чтобы найти определенные идентификаторы и заполнения - PullRequest
2 голосов
/ 16 февраля 2012

Мне нужно вытащить 3 строки из таблицы для избранного раздела на моем сайте.Сначала я получаю список из 3 предметов, которые продаются больше всего из таблицы заказов.Тогда мне нужно проверить, осталось ли что-нибудь.Если это так, вытащите их детали из инвентарной таблицы.Проблема в том, что мне всегда нужно 3. Если в таблице заказов нет 3 товаров, которые все еще есть в наличии, мне нужно сделать 3, выбранных из случайного числа.Как я могу установить WHERE id IN (1, 2), а затем по-прежнему тянуть 1 случайную запись?

Ответы [ 3 ]

3 голосов
/ 16 февраля 2012

Как насчет использования UNION и другого SELECT с LIMIT 1?

3 голосов
/ 16 февраля 2012

Хак, как этот, когда вы выбираете фиктивные данные, возможно?

SELECT TOP 3 *
FROM
(
   SELECT * from table WHERE id IN (1,2)
   UNION 
   SELECT 0;
   UNION
   SELECT 0;
   UNION 
   SELECT 0;
)
ORDER BY [whatever field]
2 голосов
/ 16 февраля 2012

Вы можете использовать UNION для объединения записей WHERE id IN (1, 2), а затем второй запрос - ваша случайная запись.

SELECT *
FROM table
WHERE id IN (1, 2)

UNION

SELECT Top 1 *
FROM table

Если вы предоставите более подробную информацию о своем запросе, то я могу предоставить более подробный ответ.

Edit: На основании вашего комментария вы сможете сделать что-то вроде этого:

SELECT * 
FROM list_cards 
WHERE card_id IN (1, 2) AND qty > 0

UNION

SELECT * 
FROM list_cards 
WHERE qty > 0

Если вы хотите быть уверенным, вы всегда получите 3 результата:

SELECT TOP 3 C.*
FROM
(
    SELECT C.*, '1' as Priority
    FROM list_cards C
    WHERE C.card_id IN (1, 2) AND qty > 0

    UNION

    SELECT C.*, '2' as Priority
    FROM list_cards C
    WHERE qty > 0
) C
ORDER BY C.Priority
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...