我正在嘗試進行查詢,可以選擇具有相同字段名稱的同一個表的前2個和後3個結果。
我儘可能地嘗試了UNION ALL
。使用限制子句以及union all或選擇top 2和last 3結果
我正在使用MYSQL和PHP。
從OP的評論:
select *
from tbl_product asc
union
select *
from tbl_product desc
order by pd_price limit 2
我正在嘗試進行查詢,可以選擇具有相同字段名稱的同一個表的前2個和後3個結果。
我儘可能地嘗試了UNION ALL
。使用限制子句以及union all或選擇top 2和last 3結果
我正在使用MYSQL和PHP。
select *
from tbl_product asc
union
select *
from tbl_product desc
order by pd_price limit 2
基本上你的問題集中在如何從邏輯總結兩個數據集源自同一實體,通過相同的標準有序的到來(價格,正如你所提到)。
第一個數據集必須考慮前兩個記錄,而第二個數據集必須考慮最後三個記錄。
首先,您應該將別名放入兩個子查詢中。
然後,對於第二個別名,您可以選擇雙重封裝它,以利用升序。
SELECT * FROM (
SELECT *
FROM tbl_product
ORDER BY pd_price ASC
LIMIT 2
) tbl1
UNION ALL
SELECT * FROM (
SELECT * FROM (
SELECT *
FROM tbl_product
ORDER BY pd_price DESC
LIMIT 3
) tbl_a
ORDER BY pd_price ASC
) tbl2
可以使用存儲過程或mysqli_multi_query
CREATE TEMPORARY TABLE IF NOT EXISTS `tmp_table` ENGINE=MEMORY SELECT `field` FROM `tbl` ORDER BY `id` ASC LIMIT 2;
INSERT INTO tmp_table SELECT `field` FROM `tbl` ORDER BY `id` DESC LIMIT 3;
SELECT field FROM tmp_table;
附:完成對不起,我的英語:)
在這裏,前2和最後3取決於您的要求,因爲它沒有提到最低的產品。你是否認爲前兩名是最高價格的產品,最後三位是最低價格或反之亦然。我假設case1。
select *
from (
SELECT *
FROM `tbl_product`
order by pd_price desc limit 2
) as t1
union all
select *
from (
SELECT *
FROM `tbl_product`
order by pd_price asc limit 3
) as t2
我已經試過此查詢結構也(完全相同),給了我一個錯誤 「UNION ALL的不正確使用和ORDER BY」。 :D –
沒什麼不同,試着去執行它。當你不把它們放到別名中時,你會得到這個錯誤,而我卻這麼做了。 –
您保存了我的工作:D –
可以粘貼你的查詢嗎? –
SELECT * FROM tbl_product ASC 工會 SELECT * FROM tbl_product遞減 爲了通過pd_price限制2. –