2014-08-28 6 views
1

мне нужно нумерацией страниц сообщения от основания моих данных, я пишу следующий запрос:MySQL Select с Inner Join, Limit только первый

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 

Проблема заключается в LIMIT предложении, мне нужно ограничить только «сообщения " Таблица.

В таблице комментариев есть много строк, и если я положил предел в таблице «0,10», то «должность» ограничен 10 сообщений, но таблица комментариев также ограничена 10.

Кто-то есть решение к моей проблеме? Я использую это в PHP-запросе.

Извините за мой плохой английский, спасибо заранее.

+0

похоже, что это будет решена ниже, но, если нет, и если вы хотите, рассмотрим следующие этой простой двухступенчатой ​​курс действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый результирующий набор, соответствующий информации, представленной на шаге 1. – Strawberry

ответ

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, как вы можете видеть, у вас есть два сообщения, ID 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, идентификатор сообщения 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

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

+0

Что именно вы ожидаете от запроса? «10 сообщений, в которых есть комментарии и отношения», или «10 сообщений с комментариями и отношениями или без них», «10 сообщений, которые содержат как минимум 1 комментарий» ... Может быть, это объяснение может помочь. – yalpertem

+0

Мне нужно 10 сообщений со всеми комментариями по этому вопросу. Этот код не работает для моего, потому что подзапрос занимает 10 первых сообщений, но все эти сообщения не проверяют условие «type_rel = 1» в последнем «INNER». Мне нужны 10 (переменные) сообщения, которые отвечают всем условиям. Мне нужно его для разбивки всех сообщений, соответствующих условиям – Manux22

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