将2个排序查询与union结合起来

时间:2014-02-16 14:12:56

标签: mysql sql union

我正在使用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。

2 个答案:

答案 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

这将按匹配关键字的数量排序。请注意,我还将分隔的字符串更改为单引号。对字符串和日期常量使用单引号是一个好主意 - 而不是别的。