Блог и новости переплетаются - вступать или объединяться или что-то еще? - PullRequest
2 голосов
/ 14 июня 2011

У меня 4 таблицы.

news:                news_link:            blog
---------            -----------           ---------
news_id,             news_link_id,         blog_id,  
news_title,          news_link_news_id,    blog_artist_id, 
news_content,        news_link_artist_id   blog_title, 
news_image,                                blog_content,  
news_date,                                 blog_date, 
news_sticky_status,                        blog_date_edited, 
news_sticky_order,                         blog_status,       
news_status,                               blog_keywords
news_keywords, 
news_date_edited 

Другая таблица предназначена для художника

У меня нет проблем с выполнением базовых объединений, чтобы связать новостные элементы с художником, используя ссылку news_ * 1006.*

В моей таблице блогов есть artist_id.

Я хочу отображать записи блога по дате на странице конкретного исполнителя, и чтобы в блоге появлялись новости, связанные с этим исполнителем.item.

Вот вывод, который я хочу:

title, date, content, status

Я попробовал несколько соединений.Нужен ли мне союз?Таблицы имеют разные метки, и для таблицы новостей потребуется объединение news_link, чтобы иметь смысл.

Каков наилучший способ добиться этого?

1 Ответ

0 голосов
/ 14 июня 2011

Я думаю, что union необходим, что-то вроде этого:

<?php
$artist = mysql_real_escape_string($_GET['artist']);
$query = 
"SELECT is_news, title, date, content, status FROM (  
  SELECT
      1 as is_news
    , a.artist_id as id 
    , n.news_title as title
    , n.news_date as date
    , n.news_content as content
    , n.news_status as status
  FROM artist a
  INNER JOIN news_link nl ON (a.artist_id = nl.news_link_artist_id)
  INNER JOIN news n ON (n.news_id = nl.news_link_news_id)
  WHERE a.artist_id = '$artist'
UNION
  SELECT 
      0 as is_news
    , a.artist_id as id
    , b.blog_title as title
    , b.blog_date as date
    , b.blog_content as content
    , b.blog_status as status
  FROM artist a
  INNER JOIN blog b ON (a.artist_id = b.blog_artist_id)
  WHERE a.artist_id = '$artist'
) s
ORDER BY s.id, s.date";

is_news будет 1 для новостей и 0 для блога.

Если вы выберете несколько исполнителей, запрос отсортирует результаты по исполнителям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...