我正在使用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?
谢谢,我赞赏你的帮助。和我的坏语法的sory。答案 0 :(得分:2)
您在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
时需要删除双记录。 < / p>
答案 1 :(得分:0)
我认为你根本不需要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
这将按匹配关键字的数量排序。请注意,我还将分隔的字符串更改为单引号。对字符串和日期常量使用单引号是一个好主意 - 而不是别的。