MySQL захватывает все сообщения пользователя и все лайки для каждого сообщения (объединение, группировка, подсчет и т. Д.) - PullRequest
2 голосов
/ 05 января 2012

Я создаю программное обеспечение для форума и пытаюсь получить все сообщения по определенному «профилю», получить все профили, которым «понравилось» каждое сообщение («лайкеры»), а затем третий выборданные профиля каждого профиля, который понравился каждому сообщению (profile_name и т.* и profile_id

Профиль не может понравиться сообщению более одного раза Профиль не может понравиться своему сообщению

Я застрял на шагеЯ сохраняю все подобные profile_ids ("likers") в массив, если для извлечения данных использую PHP.Вот что у меня есть:

SELECT post.*, COUNT(`like`.profile_id) AS like_count 
  FROM post LEFT OUTER JOIN `like` ON post.post_id = `like`.post_id 
    WHERE post.profile_id = "'.$this->profile_id.'" GROUP BY post.post_id

Спасибо заранее.Я попытаюсь обновить это, если я найду какие-либо ошибки, или если они мне указаны.

1 Ответ

5 голосов
/ 05 января 2012

Чтобы выбрать все сообщения из определенного профиля, вы просто сделаете следующий запрос:

SELECT *
FROM posts
WHERE profile_id = (the id number)

Чтобы получить все профили и их данные, которым понравился данный пост, вы должны сделать следующее:

SELECT *
FROM profiles
WHERE profile_id IN (
    SELECT profile_id
    FROM like
    WHERE post_id = (the post id number) )

Объединение этих двух запросов с IN позволит вам указать профиль и получить данные профиля для всех тех, кому понравилась любая запись в профиле этого человека. Запрос будет выглядеть так

SELECT *
FROM posts
WHERE profile_id = (the id number)

Чтобы получить все профили и их данные, которым понравился данный пост, вы должны сделать следующее:

SELECT *
FROM profiles
WHERE profile_id IN (
    SELECT profile_id
    FROM like
    WHERE post_id IN (
        SELECT post_id
        FROM posts
        WHERE profile_id = (the id number) )

Если вы хотите получить список информации о сообщении, а также данные профиля для всех, кому понравились каждое сообщение и сами сообщения, вы должны использовать JOIN следующим образом ...

SELECT *
FROM profiles JOIN posts ON (profiles.post_id = posts.post_id)
WHERE ...

... который просто объединит данные из двух таблиц в один запрос. Затем вы извлечете данные для обработки с помощью PHP по мере необходимости.

Если вы хотите внедрить такие правила, когда пользователю не может понравиться его или ее собственная публикация, вы должны будете написать это в свой php, чтобы, когда кто-то пытается разместить понравившуюся запись, есть проверка, является ли она его или ее своя. Вы не хотели бы, например, разрешить кому-то лайкать пост, записать подобное в базу данных, а затем, когда страница загружена, проверить с помощью запроса, есть ли у этого человека разрешение на это.

...