1

告诉 mySQL 获取最少记录数的最佳方法是什么?

假设我有一张产品表,我需要返回至少 5 件商品以适应网站设计。我可以很容易地写出类似的东西:

SELECT * 
FROM products 
WHERE featured = true;

但是,如果这仅返回 3 个结果,那么从数据库返回另外 2 个产品的最佳方法是什么?我在想也许UNION加入一个查询以返回几个随机产品。有没有人有任何进一步的建议?

4

1 回答 1

2

您可以使用 ORDER BY + LIMIT 来实现该效果:

鉴于该数据集:

mysql> SELECT * FROM P;
+--------+----------+
| name   | featured |
+--------+----------+
| Apple  |        1 |
| Pear   |        1 |
| Orange |        1 |
| Lime   |        0 |
| Turnip |        0 |
| Salad  |        0 |
+--------+----------+
6 rows in set (0.00 sec)

如您所见,没有足够的“特色”产品:

mysql> SELECT * FROM P WHERE featured = true LIMIT 5;
+--------+----------+
| name   | featured |
+--------+----------+
| Apple  |        1 |
| Pear   |        1 |
| Orange |        1 |
+--------+----------+
3 rows in set (0.00 se

但是通过订购检索第一个特色产品,然后使用非特色产品完成限制,您将拥有您想要的:

mysql> SELECT * FROM P ORDER BY featured DESC LIMIT 5;
+--------+----------+
| name   | featured |
+--------+----------+
| Apple  |        1 |
| Pear   |        1 |
| Orange |        1 |
| Lime   |        0 |
| Turnip |        0 |
+--------+----------+
5 rows in set (0.00 sec)
于 2013-06-26T11:51:36.617 回答