當我只是讓一個WHERE並刪除其他它會返回我正確的結果。當我擁有它時,它不會顯示任何東西。我怎樣才能正確地寫下我的邏輯?我遇到了一些困難,在我的錯誤倍數查詢
我的目標是隻顯示滿足「extra1 = $ value1和extra2 = $ value2和extra3 = $ value3」的結果。
我在某處讀到我必須添加addslashes。它有什麼用處?
$value1 = addslashes($_GET['extra1']);
$value2 = addslashes($_GET['extra2']);
$value3 = addslashes($_GET['extra3']);
$theposts = $wpdb->get_results("SELECT post_title FROM {$wpdb->posts}
WHERE ID IN
(
SELECT DISTINCT post_id
FROM {$wpdb->postmeta}
WHERE meta_key = 'extra1' AND meta_value = '$value1'
WHERE meta_key = 'extra2' AND meta_value = '$value2'
WHERE meta_key = 'extra3' AND meta_value = '$value3'
)");
爲了清除我的想法...即使帖子沒有metakey作爲extra2和metavalue作爲value2,它也會顯示metakey爲extra1和metavalue作爲value1的帖子?因爲我只想要滿足所有WHERE的帖子。該帖子必須顯示extra1/value1,extra2/value2和extra3/value3。 – EnexoOnoma 2011-05-01 06:45:13
@Mairy:這兩個選項(我在你的評論後添加了一個更新)將產生'post_id's同時滿足所有三個條件。 「INTERSECT」只是集合論的通常交集。 HAVING方法對大腦有點困難,但它或多或少是一種使用聚集(在這種情況下爲「COUNT」)的方式來選擇結果,因爲在WHERE中不能這樣做;此方法假定您的表中沒有任何重複(post_id,meta_key,meta_value)三元組。 – 2011-05-01 06:50:29
@Mairy:順便說一句,當你使用'IN'時,不需要'DISTINCT'。 'IN'是一個設置操作,所以它不會在意重複。 'DISTINCT'的確具有不重要的執行成本,因爲它通常涉及對結果進行排序並對排序結果進行表掃描。 – 2011-05-01 06:53:09