[英]Mysql query: combine two queries
以下是我正在使用的表格的過度簡化版本:
fruits +-------+---------+ | id | type | +-------+---------+ | 1 | apple | | 2 | orange | | 3 | banana | | 4 | apple | | 5 | apple | | 6 | apple | | 7 | orange | | 8 | apple | | 9 | apple | | 10 | banana | +-------+---------+
以下是兩個有趣的查詢:
SELECT * FROM fruits WHERE type='apple' LIMIT 2;
SELECT COUNT(*) AS total FROM fruits WHERE type='apple'; // output 6
我想結合這兩個查詢,以便結果看起來像這樣:
+-------+---------+---------+ | id | type | total | +-------+---------+---------+ | 1 | apple | 6 | | 4 | apple | 6 | +-------+---------+---------+
輸出必須限制為2個記錄,但它還應包含apple類型的記錄總數。
如何用1個查詢完成?
SELECT *, (SELECT COUNT(*) AS total FROM fruits WHERE type='apple') AS Total
FROM fruits WHERE type='apple' LIMIT 2;
根據MySQL的解釋方式,它可能會緩存內部查詢,這樣就不必為每個記錄重新評估它。
另一種方法是使用嵌套查詢和聯接(例如,如果您需要多個水果類型,這將很有用):
SELECT fruits.*, counts.total
FROM fruits
INNER JOIN (SELECT type, COUNT(*) AS total FROM fruits GROUP BY type) counts ON (fruits.type = counts.type)
WHERE fruits.type='apple'
LIMIT 2;
您應該SQL_CALC_FOUND_ROWS
使用SQL_CALC_FOUND_ROWS
。
SELECT SQL_CALC_FOUND_ROWS * FROM fruits WHERE type='apple' LIMIT 2;
將返回您蘋果的ID,並記住如果沒有LIMIT子句,它將返回多少
SELECT FOUND_ROWS();
將返回沒有限制聲明的情況下將發現的蘋果數量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.