У меня есть система комментариев, в которой я храню идентификатор новостей в таблице комментариев для ссылки и для получения значения из newstable, мои две таблицы выглядят следующим образом.
Новая таблица,
CREATE TABLE `news` (
`id` int(20) NOT NULL auto_increment,
`timestamp` int(20) NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NULL,
`pic_title` varchar(255) NOT NULL,
`pic_brief` varchar(255) NOT NULL,
`pic_detail` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Таблица комментариев
CREATE TABLE `comments` (
`id` int(20) NOT NULL auto_increment,
`timestamp` int(20) NOT NULL,
`title` varchar(255) NOT NULL,
`name` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`phone` int(11) NULL,
`location` varchar(50) NOT NULL,
`comment` text NOT NULL,
`approve` tinyint(1) NOT NULL,
`news_id` int(20) NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
в news_id в таблице комментариев я храню идентификатор новостей, я хочу сделать запрос выбора из таблицы комментариев, и он должен выбрать news.title из новостей, ссылающихся на news_id в таблице комментариев,
Я сделал что-то вроде этого.
$query = "SELECT comments.id,
comments.timestamp,
comments.name,
comments.email,
comments.phone,
comments.location,
comments.comment,
news.title FROM
comments, news ORDER BY id DESC LIMIT $from, " . COMM_POST_NUMBER;
как заставить его получать только заголовок из news.title, ссылающийся на идентификатор из news_id в таблице комментариев?
Вам нужно join обе таблицы:
$query = "SELECT comments.id,
comments.timestamp,
comments.name,
comments.email,
comments.phone,
comments.location,
comments.comment,
news.title
FROM comments INNER JOIN news ON comments.news_id = news.id
ORDER BY id DESC LIMIT $from, " . COMM_POST_NUMBER;
Другие обозначения:
FROM comments, news WHERE comments.news_id = news.id
P.S. не забудьте очистить свой вход, не полагайтесь на $from
как целое число, заставляйте его целое число:
$from = intval($from);
$query = 'SELECT comments.*, news.title
FROM comments
JOIN LEFT news
ON news.id = comments.news_id
ORDER BY id DESC
LIMIT ' . (int) $from . ', ' . COMM_POST_NUMBER;
используя JOIN
SELECT comments.id,
comments.timestamp,
comments.name,
comments.email,
comments.phone,
comments.location,
comments.comment,
news.title
FROM
comments
join news on news.id=comments.news_id
ORDER BY id DESC
LIMIT .................
Вам нужно предложение where перед ORDER BY:
... FROM comments, news WHERE comments.news_id = news.id ORDER BY ...