2010-09-02 35 views
1

我要的是: 獲取與日期更大的帖子,然後2010-03-02並與meta_value「東西」 +喜歡「2010-2011」MYSQL - 多選擇和類似方法

因爲有像其他值239048192304或293811743

$query = "SELECT DISTINCT wp_postmeta.meta_key, wp_postmeta.meta_value, wp_posts.ID, wp_posts.guid, wp_postmeta.post_id, wp_posts.post_title 
FROM wp_postmeta 
INNER JOIN wp_posts 
ON wp_postmeta.post_id=wp_posts.ID 
WHERE wp_postmeta.meta_value >='2010-03-02' 
AND wp_postmeta.meta_value = 'something' 
AND wp_postmeta.meta_value LIKE '2010-' 
ORDER BY wp_postmeta.meta_value ASC 
LIMIT 0,10"; 

你能幫我一下嗎?謝謝!

UPDATE2:

表wp_postmeta

post_id | meta_value  
5  | 2010-12-30  
5  | Berlin 

3  | 2010-12-29 
3  | Paris 

2  | 2009-12-29 
2  | Paris 

14  | 12232456521 
14  | Berlin 

輸出:

2010-12-30 Berlin ID 5 
2010-12-29 Paris ID 3 
+2

這沒有意義。怎樣才能成爲「東西」,同時又以「2010-」開頭?你能改說嗎? – 2010-09-02 14:32:41

+0

這裏是一個例子: 表wp_postmeta post_id | meta_value 5 | 2010-12-30 5 |東西 3 | 12232456521 – ali 2010-09-02 14:35:48

回答

2

更大的數據集和樣本的回答會有助於澄清問題,但這裏是我的,你在找什麼解釋。這不是優雅的,但如果你已經分配了緩衝空間,它就可以工作。

SELECT DISTINCT wp_postmeta.meta_key, wp_postmeta.meta_value, wp_posts.ID, wp_posts.guid, wp_postmeta.post_id, wp_posts.post_title 
FROM wp_postmeta 
INNER JOIN wp_posts 
ON wp_postmeta.post_id=wp_posts.ID 
WHERE wp_postmeta.post_id IN (
    select post_id from wp_postmeta where str_to_date(meta_value, '%Y-%m-%d') >= 2010-03-02' and post_id in (select post_id from wp_postmeta where meta_value = 'something') 
); 
+0

這看起來很有趣,我怎樣才能在循環中回顯標題? echo $ query_row ['post_title']; ? – ali 2010-09-02 15:05:24

0

這些陳述自相矛盾。首先你要求它是> =一個日期。 meta_value是日期嗎?然後你說它必須等於'某事',所以現在它是一個字符串而不是日期。最後你說它是2010年的樣子,所以現在我們回到了字符串或日期,但沒有通配符%,所以你基本上說它必須等於2010年。

  • 存儲在meta_value中的值是什麼?
  • 您確定不打算查詢多個字段嗎?

UPDATE

基於新的信息,我認爲這是你想要什麼:

$query = "SELECT DISTINCT wp_postmeta.meta_key, wp_postmeta.meta_value, wp_posts.ID, wp_posts.guid, wp_postmeta.post_id, wp_posts.post_title 
FROM wp_postmeta 
INNER JOIN wp_posts 
ON wp_postmeta.post_id=wp_posts.ID 
WHERE (wp_postmeta.meta_value = 'something' 
OR wp_postmeta.meta_value LIKE '2010-%') 
ORDER BY wp_postmeta.meta_value ASC 
LIMIT 0,10"; 

希望這是你所追求的。我刪除了2010> =條件,因爲2010 LIKE條件會提取相同的數據。

3

也許你的意思是一個OR而不是AND

... 
WHERE wp_postmeta.meta_value >= '2010-03-02' OR 
     wp_postmeta.meta_value = 'something' OR 
     wp_postmeta.meta_value LIKE '2010-' 
在英語

不幸的是,AND和OR可以在某些情況下可以互換使用:「我總是隨身攜帶的,下雨時和下雪的保護傘」

  • 「我總是在下雨或下雪時帶傘。」

以上不會爲電腦相當於:)

+0

wp_postmeta是表格(post_id,鍵值)。所以他可能真的需要選擇哪些瓦特是'東西'的帖子,像'2010-%' – 2010-09-02 14:48:03

+0

@邁克爾:你可能是對的。沒有使用wordpress數據庫的經驗...但是,答案可能有助於OP瞭解爲什麼該查詢無法工作。 – 2010-09-02 14:51:51

1

試試這個:

$query = "SELECT p.ID, m1.meta_value, m2.meta_value, p.post_title FROM 
      wp_posts p, wp_postmeta m1, wp_postmeta m2 
      WHERE p.post_date > '2010-03-02' AND 
      m1.post_id=p.ID AND m2.post_id=p.ID AND 
      m2.meta_value LIKE '2010-%' AND 
      m1.meta_value = 'something' 
      ORDER BY m1.meta_value, m2.meta_value 
      LIMIT 0,10"; 

無需爲不同的,因爲我們顯示在一行一切反正。

1

爲了得到職位信息和它們的後元值,你需要下面的查詢:

SELECT DISTINCT wp_postmeta.meta_key, wp_postmeta.meta_value, wp_posts.ID, 
       wp_posts.guid, wp_postmeta.post_id, wp_posts.post_title 
FROM wp_postmeta JOIN wp_posts 
ON  wp_postmeta.post_id = wp_posts.ID 
WHERE wp_posts.post_date >= '2010-03-02' 
AND EXISTS (SELECT 1 from wp_postmeta m1 
       WHERE m1.post_ised = wp_posts.ID 
       AND wp_postmeta.meta_value = 'something' 
AND EXISTS (SELECT 1 from wp_postmeta m2 
       WHERE m2.post_ised = wp_posts.ID 
       AND wp_postmeta.meta_value LIKE '2010-%') 
ORDER BY wp_postmeta.meta_value 
ASC LIMIT 0, 10