2017-09-25 71 views
0

我有一個來自不同日期的文本表。每個都由服務,變體以及頁面和子頁面ID進行索引。MYSQL如果不存在,選擇特定行或第一行

我需要獲取給定服務,頁面和子頁面的所有條目。即每個變體!但如果特定的特定子頁面不存在,我需要它爲該頁面獲取第一個子頁面,而不是該變體的任何內容。

這是我的代碼 -

SELECT * FROM frames f 
LEFT JOIN varients v ON f.varient_id = v.varient_id AND f.service_id = v.service_id 
ẀHERE f.service_id = :sid 
AND f.frame_id = :fid 
AND (f.subframe_id = :subid 
    OR f.subframe_id = (
     select min(subframe_id) from frames ff 
     ẀHERE ff.service_id = f.service_id 
      AND ff.varient_id = f.varient_id AND ff.frame_id = f.frame_id 
      ) 
     ) 
GROUP BY f.service_id, f.varient_id, f.frame_id 
ORDER BY f.service_id, v.varient_date, f.frame_id, f.subframe_id 

但經常不就是給人的最低,而不是特定的,即使在特定的值存在。我敢肯定,OR不是我所需要的..

我試過使用UNION作爲其他一些答案,但由於我想多個單一的結果,我似乎無法工作出來!

感謝您的任何幫助..

+0

也許你可以使用http://sqlfiddle.com/給我們數據的例子? – kenfire

+0

最好能夠在服務器端語言中應用編碼邏輯而不是複雜的查詢 –

+0

謝謝,我之前沒有聽說過sqlfiddle。 http://sqlfiddle.com/#!9/faa2f4/2 – user2158583

回答

0

好的。我設法達到了我想要的。兩天搞砸了,最後在發佈問題後解決。我得到了一個「相關」問題的幫助,雖然沒有給我一個答案,但讓我以不同的方式思考 -

我基本上把整個事情都翻出來了:因爲我只希望每個變體有一個結果,我用它作爲主表。然後加入'幀'表兩次,一次爲特定值,一次爲第一個值(通過搜索MIN()找到)。如果找到第一個值,則使用IFNULL返回第二條記錄。對WHERE中的第二條記錄進行額外IS NOT NULL檢查,以避免返回任何對變體記錄沒有任何存儲的情況。

SELECT v.service_id, v.varient_id, IFNULL(f.frame_id,ff.frame_id)as frame_id, 
     IFNULL(f.subframe_id,ff.subframe_id) as subframe_id , IFNULL(f.frameunique, ff.frameunique) as frameunique, IFNULL(f.frame_content,ff.frame_content) as framecontent 
FROM varients v 
LEFT JOIN `frames` f ON `f`.`varient_id` = `v`.`varient_id` AND `f`.`service_id` = `v`.`service_id` AND `f`.`frame_id` = 698 AND `f`.`subframe_id` = 0004 
LEFT JOIN `frames` ff ON `ff`.`varient_id` = `v`.`varient_id` AND `ff`.`service_id` = `v`.`service_id` AND `ff`.`frame_id` = 698 
AND `ff`.`subframe_id` = (select min(`subframe_id`) from `frames` `fff` where `fff`.`service_id` = `v`.`service_id` 
AND `fff`.`varient_id` = `v`.`varient_id` AND `fff`.`frame_id` = 698) 

where `v`.`service_id` = 3 AND ff.frameunique IS NOT NULL 
ORDER BY `f`.`service_id`, `v`.`varient_date`, `f`.`frame_id`, `f`.`subframe_id` 

發佈此信息以防別人幫助其他人。它仍然需要整理,但它的工作。感謝您的評論。 :)