Как объединить две таблицы MySQL-PHP с сортировкой даты - PullRequest
0 голосов
/ 19 октября 2011

Я хочу объединить результаты двух таблиц в одну. Пожалуйста, обратитесь к следующим таблицам:

    Data from microblog table as Row array
    Array ( [ID] => 46 [userID] => 1 [userNAME] => user [blog_content] => HAI DEAR [page_name] => honda [page_ID] => 31 [post_time] => 2011-10-18 11:06:54 )
 Data from Page_review table as Row array
    Array ( [page_review_id] => 5 [page_id] => 31 [page_review_by_id] => 31 [page_review_by_username] => user [page_review_time] => 2011-10-18 11:43:34 [page_review_content] => hai ) 

Таблица Микроблога MySQL query:

DROP TABLE IF EXISTS `featurezme_store`.`microblog`;
CREATE TABLE  `featurezme_store`.`microblog` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userID` int(10) unsigned NOT NULL,
  `userNAME` varchar(45) NOT NULL,
  `blog_content` text NOT NULL,
  `page_name` varchar(45) NOT NULL,
  `page_ID` int(10) unsigned NOT NULL,
  `post_time` datetime NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=latin1;

Таблица page_review

DROP TABLE IF EXISTS `featurezme_store`.`page_review`;
CREATE TABLE  `featurezme_store`.`page_review` (
  `page_review_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `page_id` int(10) unsigned NOT NULL,
  `page_review_by_id` int(10) unsigned NOT NULL,
  `page_review_by_username` varchar(145) NOT NULL,
  `page_review_time` datetime NOT NULL,
  `page_review_content` varchar(555) NOT NULL,
  PRIMARY KEY (`page_review_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

таблица Microblog используется для хранения сообщений в блоге, а page_review используется для хранения отзывов о страницах [Микроблог находится на страницах].

Мое требование: я хочу показать посты и обзоры страниц, отсортированные по дате [post_time в микроблоге & page_review_time на page_review].

как я могу это сделать? пожалуйста, помогите мне.

1 Ответ

1 голос
/ 19 октября 2011

Хорошо, я обновил свой ответ, вы можете использовать union, как вы хотели.

Просто имейте одинаковое количество полей, и поскольку результаты помещаются одно под другим, используйте поля, которые имеют смысл быть одно под другим.В этом примере будут приведены все блоги и обзоры, созданные конкретным пользователем (если page_review_by_id действительно ссылается на идентификатор пользователя) и связанные с определенной страницей.

( 
SELECT  
`microblog`.`userID`, 
`microblog`.`blog_content` as `blog or review`, 
`microblog`.`post_time`, 
`microblog`.`page_id` 
from `microblog`
where `microblog`.`page_id`='1' and `microblog`.`userID`='1' 
)
union
( 
SELECT  
`page_review`.`page_review_by_id`, 
`page_review`.`page_review_content`, 
`page_review`.`page_review_time`, 
`page_review`.`page_id`
from `page_review`
where `page_review`.`page_id`='1' and `page_review`.`page_review_by_id`='1' 
) 

======== Редактировать ==Предложение схемы с внешними ключами ================

Потому что я не вижу никаких внешних ключей в вашей схеме, если бы я мог предложить схему, которая применяет внешниеключи, которые я представляю ниже.

Эти правила поддерживаются этой схемой:

  • Блоги принадлежат сайту, а не пользователю, поэтому каскад удаления не применяется.
  • Блоги создаются пользователями, и применяется внешний ключ, поэтому при вставке идентификатора пользователя согласованность обеспечивается посредством внешнего ключа.
  • То же самое относится и к странице, внешний ключ применяется без каскада delte.
  • То же самое относится к таблице отзывов
  • Если пользователь или страницане удалено ни одна дочерняя строка не удалена

    / ******** Создать***** *** / CREATE TABLE user (user_id int без знака NOT NULL AUTO_INCREMENT, username varchar (16) NOT NULL, userpassword BLOB,
    ПЕРВИЧНЫЙ КЛЮЧ (user_id)) ENGINE = InnoDB CHARSET ПО УМОЛЧАНИЮ = latin1;

    CREATE TABLE page (page_id mediumint без знака, НЕ NULL AUTO_INCREMENT,title varchar (55) NOT NULL,
    ПЕРВИЧНЫЙ КЛЮЧ (page_id)) ENGINE = InnoDB CHARSET DEFAULT = latin1;

    CREATE TABLE microblog (blog_id int без знака, НЕ NULL AUTO_INCREMENT,blog_content текст NOT NULL,
    date_created datetime NOT NULL, author_id int без знака NOT NULL, page_id mediumint без знака NOT NULL, первичный ключ (blog_id), ограничение blogfk1 внешний ключ (* 1064)*) ССЫЛКИ user (user_id), / НЕТON DELETE CASCADE / CONSTRAINT blogfk2 ИНОСТРАННЫЙ КЛЮЧ (page_id) ССЫЛКИ page (page_id)) ENGINE = InnoDB DARAULT CHARSET = latin1;

    CREATE TABLE page_review (review_id int unsigned NOT NULL AUTO_INCREMENT, review_content varchar (555) NOT NULL, date_created datetime NOT NULL, author_id int unsigned NOT NULL, page_id mediumint без знака NOT NULL,
    ПЕРВИЧНЫЙ КЛЮЧ (review_id), CONSTRAINT reviewfk1 ИНОСТРАННЫЙ КЛЮЧ (author_id) ССЫЛКИ user (user_id), / НЕТ НА УДАЛЕННОМ КАСКАДЕ / CONSTRAINT reviewfk2 ИНОСТРАННЫЙ КЛЮЧ (page_id) ССЫЛКИ page (page_id)) ENGINE = InnoDB CHARSET ПО УМОЛЧАНИЮ = latin1;/ ************** ****** /

    / ** *** Вставки *** ** /
    INSERT INTO user (username,userpassword) VALUES ('username11', AES_ENCRYPT ('password1', 'encription_key')), ('username22', AES_ENCRYPT ('password2', 'encription_key')));

    INSERT INTO page(title) VALUES ('title1'), ('title2');

    INSERT INTO microblog (blog_content, date_created, author_id, page_id) VALUES ('blogcontent1',' 2011-2-2 12:00 ',' 1 ',' 1 '), (' blogcontent2 ',' 2011-2-2 12:00 ',' 2 ',' 2 ');

    INSERT INTO page_review (review_content, date_created, author_id, page_id) ЗНАЧЕНИЯ ('reviewcontent1', '2011-2-2 12:00', '1', '1'), ('reviewcontent2', '2011-2-2 12:00', '2', '2');/ ***** ******* /

    / ******* Запросы *** / / Справка по идентификации пользователя / SELECT username ОТ user ГДЕ username = 'username22' и userpassword= AES_ENCRYPT ('password2', 'encription_key')

    (SELECT
    microblog. blog_content как blog or content, microblog. date_created, microblog. author_id,microblog. page_id из microblog, где microblog. author_id = '1' и microblog. page_id = '1').( SELECT
    page_review. review_content, page_review. date_created, page_review. author_id, page_review. page_id с page_review где page_review. author_id = '1' и page_review. page_id = '1' )

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