Mysql 将2个排序查询与union组合

Mysql 将2个排序查询与union组合,mysql,sql,union,Mysql,Sql,Union,我正在使用union组合2个查询。 在添加订单时出现了一些问题 这是当前存在的查询 SELECT * FROM ( SELECT * FROM ( SELECT nama_barang FROM transaksi_jual WHERE kategori_barang.`id_kategori`= "3" AND id_kam

我正在使用union组合2个查询。 在添加订单时出现了一些问题

这是当前存在的查询

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个


谢谢,我感谢你的帮助。对不起,我语法不好。

你在工会后点菜,比如:

SELECT * FROM table1

UNION

SELECT * FROM table2

ORDER BY id
这个顺序对表1和表2中的整个结果进行排序

如果您想先查看第一个子集的记录,请尝试:

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

这将按匹配关键字的数量排序。注意,我还将分隔的字符串更改为单引号。对字符串和日期常量使用单引号是一个好主意,除此之外什么都不做。

但是对每个查询使用顺序如何。有可能吗?有什么意义?整个结果集将是无序的?也就是说,我相信(不是100%确定)这是不可能的。是的,但是有一个解决办法(请参阅我的编辑)。重点是显示包含搜索关键字中所有单词的按日期排序的数据,其余显示包含搜索关键字中几个单词的按日期排序的数据。@user3209635啊,好的,在这种情况下,我认为第二个代码示例适合您。代码有两个非常奇怪的部分:
(nama_barang像“%%”和nama_barang像“%%”,nama_barang像“%%”和nama_barang像“%%”)
(nama_barang类“%%”或nama_barang类“%%”或nama_barang类“%%”或nama_barang类“%%”)
This
LIKE
事情一点也不让你困惑?@Alexander…我假设OP简化了问题的查询。不,像这样的事情是通过“for”循环构建的,将每个单词从用户输入的搜索键中分离出来。而且,我查询的要点是显示包含sea中所有单词的按日期排序的数据rch键和rest键显示按日期排序的数据,这些数据包含搜索键中的几个单词。