[英]MYSQL - Combining Two Results in One Query
我需要執行查詢以顯示項目的搜索結果。 需要發生什么,我需要按“ horsesActiveDate”對結果進行排序,這適用於所有結果,除了adtypesID = 7的任何廣告。 這些結果按日期排序,但它們必須始終排在所有其他廣告之后。
因此,我將根據有效日期和adtypesID!= 7對結果集中的所有廣告進行排序。之后,我需要按有效日期對所有adtypesID = 7進行排序,並將其附加在所有結果的底部。
我希望將其放在一個查詢中而不是兩個查詢中,並將其附加到PHP中。 代碼的編寫方式,我必須找到一種方法可以在一個查詢中將其全部獲取。
因此,這是我的原始查詢,在我不得不廣告具有不同排序要求的adtypesID = 7之前,它一直很有效。
這是現在存在的查詢,不考慮adtypesID進行排序。
SELECT
horses.horsesID,
horsesDescription,
horsesActiveDate,
adtypesID,
states.statesName,
horses_images.himagesPath
FROM horses
LEFT JOIN states ON horses.statesID = states.statesID
LEFT JOIN horses_images ON horses_images.himagesDefault = 1 AND horses_images.horsesID = horses.horsesID AND horses_images.himagesPath != ''
WHERE
horses.horsesStud = 0
AND horses.horsesSold = 0
AND horses.horsesID IN
(
SELECT DISTINCT horses.horsesID
FROM horses
LEFT JOIN horses_featured ON horses_featured.horsesID = horses.horsesID
WHERE horses.horsesActive = 1
)
ORDER BY adtypesID, horses.horsesActiveDate DESC
我的第一個想法是進行兩個查詢,其中一個查找所有不包含adtypesID = 7的廣告,然后按查詢的方式對其進行排序,然后運行第二個查詢,以僅查找那些adtypesID = 7的廣告並按日期對它們進行排序。 然后將這兩個結果相加。 由於我需要將所有這些信息整合到一個查詢中,因此我無法使用php函數來做到這一點。
有沒有一種方法可以在mysql中一個接一個地合並兩個查詢結果? 有沒有更好的方法來運行此查詢以完成排序?
理想結果將如下所示(我修改了列名,因此它們會更短):
ID | Description | ActiveDate | adtypesID | statesName | himagesPath
___________________________________________________________________________
3 | Ad Text | 06-01-2010 | 3 | OK | image.jpg
2 | Ad Text | 05-31-2010 | 2 | LA | image1.jpg
9 | Ad Text | 03-01-2010 | 4 | OK | image3.jpg
6 | Ad Text | 06-01-2010 | 7 | OK | image5.jpg
6 | Ad Text | 05-01-2010 | 7 | OK | image5.jpg
6 | Ad Text | 04-01-2010 | 7 | OK | image5.jpg
可以提供的任何幫助將不勝感激!
我不確定MySQL中的確切語法,但是類似
ORDER BY case when adtypesID = 7 then 2 else 1 end ASC, horses.horsesActiveDate DESC
可以在許多其他SQL語言中使用。 請注意,大多數SQL方言都允許order by不僅是列,而且是表達式。
這應該工作:
ORDER BY (adtypesID = 7) ASC, horses.horsesActiveDate DESC
使用聯合將兩個查詢附加在一起,如下所示:
SELECT whatever FROM wherever ORDER BY something AND adtypesID!=7
UNION
SELECT another FROM somewhere ORDER BY whocares AND adtypesID=7
我將您的查詢重新編寫為:
SELECT h.horsesID,
h.horsesDescription,
h.horsesActiveDate,
adtypesID,
s.statesName,
hi.himagesPath
FROM HORSES h
LEFT JOIN STATES s ON s.stateid = h.statesID
LEFT JOIN HORSES_IMAGES hi ON hi.horsesID = h.horsesID
AND hi.himagesDefault = 1
AND hi.himagesPath != ''
LEFT JOIN HORSES_FEATURED hf ON hf.horsesID = h.horsesID
WHERE h.horsesStud = 0
AND h.horsesSold = 0
AND h.horsesActive = 1
ORDER BY (adtypesID = 7) ASC, h.horsesActiveDate DESC
使用LEFT JOIN等的IN
子查詢將意味着將返回horsesActive
值為1的任何馬記錄-不管它們是否具有關聯的HORSES_FEATURED
記錄。 我將其留給您檢查數據,以決定是否確實是INNER JOIN。 同樣對於STATES表關系...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.