2016-07-26 59 views
2

需要這個查詢幫助...MySQL的回報率排,如果存在,否則不同的行

SELECT field_value, file 
FROM " . $wpdb->prefix . "cf7dbplugin_submits 
WHERE form_name = '" . $form_name . "' AND submit_time = '" . $submit_time . "' AND (field_name = 'csv_parts_file' OR field_name = 'csv_paste_file'); 

基本上,我想在這裏只返回1行,但我需要讓行,其中field_name = 'csv_parts_file'(如果存在),但如果不存在比我需要得到該行代替field_name = 'csv_paste_file'。我想我可能需要在這裏做一個CASE,但不知道如何。沒有太多的CASE陳述經驗。

任何幫助在這裏非常感謝。

數據庫表結構如下: Database Table structure

+1

無需case語句在所有;只需將'ORDER BY field_name LIMIT 1'添加到現有的SQL –

+0

@MarkBaker我正在使用'$ wpdb-> get_row',所以不要認爲它適用於此。 –

+0

你爲什麼不認爲它會起作用?你相信一個複雜的CASE會起作用! ORDER BY子句將首先放置'csv_parts_file',如果同時存在,則放置'csv_parts_file',如果沒有'csv_parts_file'項,則LIMIT 1將只放入第一個條目 –

回答

0

那麼它做到這一點有點怪異的方式,但它應該工作:

SELECT field_value, file, IF(field_name = 'csv_parts_file', 0, 1) as condition 
FROM " . $wpdb->prefix . "cf7dbplugin_submits 
WHERE form_name = '" . $form_name . "' 
AND submit_time = '" . $submit_time . "' 
AND (field_name = 'csv_parts_file' OR field_name = 'csv_paste_file') 
ORDER BY condition 
LIMIT 1 
+0

不確定OR是否正確,因爲它可能會返回> 1行。 – Jeff

+0

@Jeff當'LIMIT 1'時它怎麼能返回多於一行? –

+0

你是對的我最後錯過了LIMIT 1聲明......但是,在那種情況下,哪一行會返回?符合OR中第一個條件的行或符合第二個條件的行? – Jeff

相關問題