告诉 mySQL 获取最少记录数的最佳方法是什么?
假设我有一张产品表,我需要返回至少 5 件商品以适应网站设计。我可以很容易地写出类似的东西:
SELECT *
FROM products
WHERE featured = true;
但是,如果这仅返回 3 个结果,那么从数据库返回另外 2 个产品的最佳方法是什么?我在想也许UNION
加入一个查询以返回几个随机产品。有没有人有任何进一步的建议?
您可以使用 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)