Связать 2 таблицы

monk

Новичок
Связать 2 таблицы

Есть 2 таблицы.
В одной записываются записи (note).
В другой комментарии к записям(comment), id записи и время (time) комментария

Нужно отдим запросом показать записи, прокоментированные последними (order by time DESC)

Как лучше сделать?
Пробовал
$db_query = mysql_query("SELECT id, note FROM table_note WHERE id IN (SELECT DISTINCT nid FROM table_comments) LIMIT 5");

Но не получалось отсортировать записи (note) по времени (time) комментирования.

Может JOIN? Как можно тогда с помощью JOIN осуществить?
 

monk

Новичок
Что-то вроде?:

mysql_query("SELECT DISTINCT id, note FROM table_comments LEFT JOIN table_note ON (table_note.time = table_comments.time) order by table_note.time desc LIMIT 5")
 

monk

Новичок
так не работает
mysql_query("SELECT DISTINCT id, note FROM table_comments INNER JOIN table_note ON id = nid order by table_comments.time desc LIMIT 5")
 

dimagolov

Новичок
monk
в таблице table_comments у тебя должны быть id note, который откоментирован и по ним связывать
 

monk

Новичок
dimagolov
Я понял, что связывать по ним, но не очень хорошо понимаю как правильно это сделать в моем случае.

nid в таблице table_comments - Это есть id записей table_note

-~{}~ 19.11.07 15:54:

Пробова так, безуспешно...
mysql_query("SELECT DISTINCT id, note FROM table_note INNER JOIN table_comments ON id = nid LIMIT 5")
 

monk

Новичок
Nogrogomed
Дело не в order. Запрос не дает никаких резутьтатов.

-~{}~ 19.11.07 16:08:

Так тоже ничего...
mysql_query("SELECT DISTINCT id.table_note, note.table_note FROM table_comments INNER JOIN table_note ON id = nid ORDER by time.table_comments DESC LIMIT 5")
 

dimagolov

Новичок
DISTINCT там зачем? убери.
приведи пример таблиц (поля/тип и по 3-5 строк данных)
 

Nogrogomed

Новичок
а эти записи есть?

-~{}~ 19.11.07 16:19:

dimagolov, можно и группировать. Но DISTINCT тоже работает, и в связи с отсутвием агрегатных функций - группировку я бы не использовал.
 

monk

Новичок
dimagolov
Да, DISTINCT то получается уже не нужным...

CREATE TABLE `table_note` (
`id` INT NOT NULL AUTO_INCREMENT ,
`uid` int(11),
`user` TEXT,
`note` TEXT,
`time` int(11),
`foto` TEXT,
`block` int(3) default NULL,
`rtime` int(11) default NULL,
`attach` int(11) default NULL,
PRIMARY KEY ( `id` )
);
#################################################
CREATE TABLE `table_comments` (
`id` int(11) NOT NULL auto_increment,
`uid` int(11),
`nid` int(11),
`login` text NOT NULL,
`msg` text NOT NULL,
`time` text NOT NULL,
PRIMARY KEY (`id`)
);

-~{}~ 19.11.07 17:06:

#################################################
TABLE `table_note`
id
1
2
3
#################################################
TABLE `table_comments`
id|nid|time
1 | 1 |timeshtamp
2 | 1 |
3 | 2 |
4 | 1 |
5 | 3 |
6 | 2 |
 

Nogrogomed

Новичок
Мда. тока присмотрелся к твоему запросу. ошибки надоело считать. Попробуй:
1. понять что значит запись id.table_note, note.table_note (из твоего запроса)
2. Понять что с чем будет связываться, в чем ошибка и как ее разрешить в этой части: INNER JOIN table_note ON id = nid
1. Сделать mysql_query(...) or die(mysql_error()), чтобы посмотерть, что не нравится мускулю
 

monk

Новичок
Nogrogomed
Вот. Работает, но медленно. Около 7 секунд обрабатывается...

[sql]mysql_query("SELECT DISTINCT t1.id, t1.note
FROM table_note AS t1
INNER JOIN table_comments AS t2 ON t1.id=t2.nid
ORDER BY t2.time desc LIMIT 20")[/sql]
 

monk

Новичок
dimagolov

Array (
[0] => 1
[id] => 1
[1] => SIMPLE
[select_type] => SIMPLE
[2] => table_comments
=> table_comments
[3] => ALL
[type] => ALL
[4] =>
[possible_keys] =>
[5] =>
[key] =>
[6] =>
[key_len] =>
[7] =>
[ref] =>
[8] => 33102
[rows] => 33102
[9] => Using temporary; Using filesort
[Extra] => Using temporary; Using filesort
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Индексы по полям "связывания"
Инндексы по всем полям, что участвуют в сортировке, поиске и т.д.
 

monk

Новичок
Такой вариант без DISTINCT работает быстро.
Но таким образом происходит выборка по повторяющимся записям в зависимости от числа комментов в этой записи...
Как тогда исключить повтор? GROUP BY тоже работает медленно.

И еще при использовании DISTINCT и GROUP BY выборка по дате комментария нарушается.

[SQL]
mysql_query("SELECT table_note.id, table_note.note
FROM table_note
RIGHT JOIN table_comments ON table_note.id=table_comments.nid
ORDER BY table_comments.time desc LIMIT 20")[/SQL]
 
Сверху