2014-08-28 72 views
1

我需要從我的數據的基礎上進行分頁一個職位,我寫了一個查詢:MySQL的選擇與內部聯接,僅限制第一

SELECT posts.ID, posts.date, comments.name, comments.value 
FROM posts 
INNER JOIN comments 
    ON comments.ID = posts.ID 
INNER JOIN relations 
    ON relations.ID = posts.ID 
WHERE type_rel=1 AND status_post=1 AND 
LIMIT 0,10 

的問題是在極限句話,我需要僅限制「的帖子「表。

的意見表中有許多行,如果我把在「0,10」,在「上崗」表僅限於10個員額限制,但comments表也僅限於10

有人有一個解決方案對我的問題?我在PHP查詢中使用這個。

對不起,我的英語不好,在此先感謝。

+0

它看起來像這樣在下面解決,但是,如果沒有,如果你喜歡,可以考慮下列行爲這個簡單的兩步過程: 1。如果您還沒有這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry 2014-08-28 09:27:39

回答

3

您可以使用子查詢來限制結果集和返回再加入:

SELECT 
    posts.ID, 
    posts.date, 
    comments.name, 
    comments.value 
FROM 
    (SELECT * FROM posts WHERE status_post = 1 LIMIT 0,10) posts 
LEFT JOIN 
    comments 
    ON comments.ID = posts.ID 
LEFT JOIN 
    relations 
    ON relations.ID = posts.ID AND relations.type_rel = 1 

從意見,查詢中您的索引文件是錯誤的,這是正確的:

SELECT 
    wp_posts.ID, 
    wp_posts.post_date, 
    wp_postmeta.meta_key, 
    wp_postmeta.meta_value 
FROM (SELECT * FROM wp_posts WHERE post_status="publish" AND post_type="post" LIMIT 0,2) wp_posts 
LEFT JOIN wp_postmeta 
    ON wp_postmeta.post_id = wp_posts.ID 
LEFT JOIN wp_term_relationships 
    ON wp_term_relationships.object_id = wp_posts.ID 
    AND wp_term_relationships.term_taxonomy_id=2 

示例結果here,你可以看到你有兩個職位,編號1和5

如果你想保持它有term_taxonomy_id = 2使用這個帖子:

SELECT 
    wp_posts.ID, 
    wp_posts.post_date, 
    wp_postmeta.meta_key, 
    wp_postmeta.meta_value 
FROM (
    SELECT * 
    FROM wp_posts 
    JOIN wp_term_relationships 
    ON wp_term_relationships.object_id = wp_posts.ID 
    AND wp_term_relationships.term_taxonomy_id = 2 
    WHERE post_status="publish" AND post_type="post" LIMIT 0,2) wp_posts 
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID 

Example here,帖子的ID是5和7,用限制0,1只返回5

+0

評論是不適合擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/60304/discussion-on-answer-by-ende-neu-mysql-select-with-inner-join-limit-only-第一)。 – Taryn 2014-08-30 16:27:47

0

您可以限制只有行從職位表

SELECT posts.ID, posts.date, comments.name, comments.value 
FROM (select * from posts limit 0,10) posts 
INNER JOIN comments 
    ON comments.ID = posts.ID 
INNER JOIN relations 
    ON relations.ID = posts.ID 
WHERE type_rel=1 AND status_post=1 
+0

我嘗試您所說的內容,但需要將限制設置爲「0,3」以顯示第一篇文章和「 0,4「第二,如果我設置2或1的限制,則查詢返回空 – Manux22 2014-08-28 06:30:23

+0

您對查詢的期望是什麼? 「10個都有評論和關係的職位」,或者「有或沒有評論和關係的10個職位」,「有至少1條評論的10個職位」......也許這個解釋可能有幫助。 – yalpertem 2014-08-28 06:44:47

+0

我需要10篇文章和所有評論。這段代碼不適用於我,因爲子查詢需要10個第一篇文章,但是所有這些文章都沒有在最後一個「INNER」中驗證「type_rel = 1」條件。我需要10個符合所有條件的(可變)職位。我需要它分頁符合條件的所有帖子 – Manux22 2014-08-28 22:30:33

0

你可以試試:

SELECT a.ID, a.date, a.name, a.value 
FROM (
SELECT posts.ID, posts.date, comments.name, comments.value, 
     @post_rank := IF(@current_post = posts.ID, @post_rank + 1, 1) AS post_rank, 
    @current_post := posts.ID 
FROM posts 
INNER JOIN comments 
    ON comments.ID = posts.ID 
INNER JOIN relations 
    ON relations.ID = posts.ID 
WHERE type_rel=1 AND status_post=1 
ORDER BY posts.ID DESC)a 
WHERE a.post_rank <= 10