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

monk

Новичок
HraKK
В этом случае не получится выбрать определенное количество записей (например 20). всегда будет 20 или меньше...
 

Gas

может по одной?
monk
1. нужно написать что конкретно было сделано, в данном случае индексы на какие поля были добавлены;
2. кинуть результат explain, желательно в удобоваримом формате из оконсоли.

иначе будут гадания на кофейной гуще.
 

monk

Новичок
mysql_query("SELECT DISTINCT table_note.id, table_note.note
FROM table_note
RIGHT JOIN table_comments ON table_note.id=table_comments.nid
WHERE table_note.block is null
ORDER BY table_comments.time desc LIMIT 20")

Чтобы отфилитровать повторяющиеся значения использую DISTINCT. При этом сотрировка по table_comments.time нарушается...Как выйти из положения?
 

Gas

может по одной?
monk
бот? хочешь помощи - ответь на вопросы, это сообщение все уже видели.

И чем ты руководствуешся при выборе типа джойна, сначала left, потом inner, а теперь right ? Это не просто 4/5 разных букв, это разные запросы.
 

monk

Новичок
Проинтексировал столбец nid через phpmyadmin/ пишет, что Количество проиндексированных элементов 6622
Почему так ведь в таблице 33113 записей?

Имя индекса PRIMARY
Тип PRIMARY
Количество элементов 33113
Действие Поле id

Имя индекса nid
Тип INDEX
Количество элементов 6622
Действие Поле nid

-~{}~ 20.11.07 01:03:

Gas
Тип INDEX сделан был для поля nid в таблице коментов.
А в таблице note id имеет тип индекса PRIMARY
И для поля note был сделан индекс FUllTEXT
Вот EXPLAIN: (простите если не в очень удобной форме)
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] => 33113
[rows] => 33113
[9] => Using filesort
[Extra] => Using filesort

-~{}~ 20.11.07 01:05:
Автор оригинала: Gas
И чем ты руководствуешся при выборе типа джойна, сначала left, потом inner, а теперь right ? Это не просто 4/5 разных букв, это разные запросы.
Как это не странно скоростью выполнения запроса.....
По возможности дай хороший ман по JOIN...
 

dimagolov

Новичок
monk
ман по JOIN, самый лучший: :)
INNER - каждой строке левой таблице ОБЯЗАНА быть найдена парв из правой согдасно условию. если пара не найдена, то никто в выборку не попадает, ни с лева ни с права. если пар несколько, то получем все комбинации всех возможных пар (это когда в условии связывания хотя бы одно из полей не уникально, как на пример к тебя много коментариев к одному сообщению)
LEFT - для строки в левой таблице пары из правой находятся, если они существую, если их нет - забиваются поля правой null-ами
RIGHT - аналогично LEFT, но наоборот. то есть поля левой будут забиты null-ами если пара для правой строки в левой не найдена
 
Сверху