2012-02-15 44 views
2

我需要从我的网站上的特色部分的表中拉3行。我首先从订单表中检索出售量最高的3件商品的列表。然后我需要检查一下,看看有没有剩下。如果是这样,请从库存表中提取其详细信息。问题是,我总是需要3.如果订单表中没有3个物品仍然有货,我需要足够的3个,从随机选择。我怎样才能设置WHERE id IN (1, 2),然后仍然拉1随机记录?SQL查找某些ID和填充

+2

哪个数据库lang? – 2012-02-15 21:04:39

+0

我使用mysql – LordZardeck 2012-02-15 21:09:32

回答

2

您可以使用UNION加入记录WHERE id IN (1, 2),然后第二个查询是您的随机记录。

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

UNION 

SELECT Top 1 * 
FROM table 

如果您提供了有关您的查询的更多详细信息,那么我可以提供更详细的答案。

编辑: 基于您的评论,你应该能够做一些这样类似:

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 
+0

好吧,我正在使用cakephp,现在它并没有显示我的查询是什么。但我想它会看起来像'SELECT * FROM list_cards where card_id IN(1,2)AND qty> 0' – LordZardeck 2012-02-15 21:14:02

+0

@LordZardeck请参阅我的编辑。 – Taryn 2012-02-15 21:15:59

+0

如果card_id 2的数量为0,会发生什么情况?那么我只会得到2个结果? – LordZardeck 2012-02-15 21:19:14

3

如何UNION和另一个SELECT,与LIMIT 1

3

这样的黑客可能会选择虚拟数据吗?

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]