[英]combine 2 sorted query with union
我使用聯合來結合2查詢。 當我在上面添加ORDER時會出現一些問題。
這是當前存在的查詢
SELECT *
FROM (
SELECT *
FROM (
SELECT nama_barang
FROM transaksi_jual
WHERE kategori_barang.`id_kategori`= "3"
AND id_kampus = "1"
AND ( nama_barang LIKE "%galaxy%"
AND nama_barang LIKE "%young%" )
) A ORDER BY date DESC
UNION
SELECT *
FROM (
SELECT A
FROM nama_barang
WHERE kategori_barang.`id_kategori`= "3"
AND id_kampus = "1"
AND ( nama_barang LIKE "%galaxy%"
OR nama_barang LIKE "%young%"
)
) B ORDER BY tanggal DESC
) drived LIMIT 0,12
我的查詢有什么問題? 還有沒有其他方法可以將2排序查詢合並為1? 如何將2排序查詢合並為1?
謝謝,我請你幫忙。 為我的語法不好而煩惱。
您在UNION之后下訂單,例如:
SELECT * FROM table1
UNION
SELECT * FROM table2
ORDER BY id
此ORDER BY對table1和table2的整個結果進行排序
如果要首先獲取第一個子集的記錄,請嘗試:
SELECT *, 1 AS order FROM table1
UNION
SELECT *, 2 AS order FROM table2
ORDER BY order, id
注意: UNION
要比UNION ALL
執行得多,請確保要使用UNION
時需要刪除雙記錄。
我認為您根本不需要union
。 除了where
子句的一部分外,這兩個子查詢似乎相同。
SELECT nama_barang,
harga,
id_jual,
kampus.`nama`,
deskripsi,
tanggal,
baru
FROM transaksi_jual
JOIN seller
USING (id_seller)
JOIN kategori_barang
USING (id_kategori)
JOIN kampus
USING (id_kampus)
JOIN subkategori_barang2
ON subkategori_barang2.`id` = transaksi_jual.`id_subkategori2`
JOIN subkategori_barang
ON subkategori_barang.`id` = transaksi_jual.`id_subkategori1`
WHERE kategori_barang.`id_kategori`= "3"
AND id_kampus = "1"
AND (( nama_barang LIKE "%%"
AND nama_barang LIKE "%%"
AND nama_barang LIKE "%%"
AND nama_barang LIKE "%%"
) OR
( nama_barang LIKE "%%"
OR nama_barang LIKE "%%"
OR nama_barang LIKE "%%"
OR nama_barang LIKE "%%"
)
)
ORDER BY tanngal;
我不確定您要什么順序,但是可以肯定的是,您可以通過一個查詢來完成。
編輯:
我想這就是您真正想要的。 為此,請對單個查詢使用以下order by
:
order by ((nama_barang LIKE '%%') +
(nama_barang LIKE '%%') +
(nama_barang LIKE '%%') +
(nama_barang LIKE '%%')
) desc
這將根據匹配關鍵字的數量排序。 請注意,我還將字符串分隔為單引號。 對字符串和日期常量使用單引號是個好主意-別無其他。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.