2014-03-01 32 views
0

我有一個posts表和id列和更多,votes表和post_id,value列和更多。每個post_id可以在votes表中重複。使用簡單JOIN

現在我想從數據庫中選擇最投票帖子(和投票數),我已經試了下:

$query = "SELECT p, SUM(v.value) FROM {$wpdb->posts} p, wp_wti_like_post v JOIN p.id v.post_id WHERE 1=1"; 
$myrows = $wpdb->get_results($query); 
var_dump($myrows); 

,但它檢索一個空數組。

注:{$wpdb->posts}是職位

+1

由於此查詢中存在各種錯誤,它可能不會檢索到任何內容。 – GolezTrol

+0

加入語法開頭是錯的,它應該是'SELECT ... FROM x JOIN y ON x.id = y.other_id WHERE ... 另外我不明白你爲什麼會把1 = 1 – Gregory

+0

你應使用'$ wpdb-> show_errors();'排查查詢 –

回答

2

你需要按post.id,讓每一個崗位和適當的正確的表。然後你可以按該總和降序排列並得到第一行(=最高值)。

SELECT 
    p.*, /* Not sure if this will work. Maybe you have to 
      specify exact fields you need, although MySQL 
      is pretty forgiving. */ 
    SUM(v.value) AS number_of_votes 
FROM 
    {$wpdb->posts} p 
    INNER JOIN wp_wti_like_post v ON v.post_id = p.id 
GROUP BY 
    p.id 
ORDER BY 
    SUM(v.value) DESC 
LIMIT 1"; 
+0

您必須僅選擇表「p」中將被分組的字段,不是嗎? – indapublic

+0

真的,呃其他數據庫,是的,但是在MySQL中你不需要。也就是說,我認爲這樣做更具可讀性,一般來說使用'*'不好。但是因爲我不知道'p'的字段,所以我冒昧地像這樣做。 :) – GolezTrol

+0

@ManoloSalsas更改內部左連接,所以使用內部連接如果沒有對帖子的投票,那麼將不會顯示文章 –

0

我沒有測試過,但它應該爲你工作。

SELECT {$wpdb->posts}.*,wp_wti_like_post.*, SUM(wp_wti_like_post.value) as Svalue 
FROM {$wpdb->posts} 
JOIN wp_wti_like_post ON wp_wti_like_post.post_id = {$wpdb->posts}.id