簡體   English   中英

將2個排序的查詢與並集結合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM