Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Помогите объединить 3 таблицы в 1 запрос

Помогите объединить 3 таблицы в 1 запрос


     25.03.2014    Общие вопросы, MySQL    2575

вопрос
Привет всем, некоторые помнят мой первый Вопрос ,там мне нужно было объединить 2 таблицы в 1 запросе.

Теперь мне надо объединить 3 таблицы в одном запросе.
Делал так, но таблица с комментариями (третья) выдаёт полную ерунду.

SELECT m . * , TRUNCATE( SUM( mr.`num` ) / COUNT( mr.`num` ) , 1 ) AS rating, COUNT( mrr.id ) AS comments
FROM dle_mymaterials m
LEFT JOIN dle_room_mymaterials  mr ON ( m.id = mr.id )
LEFT JOIN dle_room_mymaterials  mrr ON ( mr.id = mrr.id )
WHERE cat =  'Категория'
GROUP BY m.id
ORDER BY comments DESC

Но при прямом запросе выдаёт верно.

SELECT * , COUNT( id ) AS comments
FROM  `dle_mymaterials_comments`
WHERE id =2

Это мне нужно для сортировки выполнить, где одно без другого не сможет. Помогите плиз)) Заранее спасибо!)

Ответил: kricha


SELECT dm.*, COUNT(dmc.comm_id) as comments, TRUNCATE(SUM(dmr.num)/COUNT(dmr.num), 1) as rait
FROM dle_mymaterials dm
LEFT JOIN dle_mymaterials_comments  dmc ON (dm.id = dmc.room_id)
LEFT JOIN dle_mymaterials_rating dmr ON (dm.id = dmr.room_id)
GROUP BY dm.id
ORDER BY comments DESC

12 комментариев

kricha
Юзер

kricha - 25 марта 2014 14:36 -

что-то мне подсказывает, что дело в группировке.

vk_159926832
Юзер

vk_159926832 - 25 марта 2014 14:44 -

Щас бы дождаться - dj-avtosh, он отлично помогает)

kricha
Юзер

kricha - 25 марта 2014 14:50 -

так вам нужно проанализировать проблему. Уберите груп бай, посмотрите на результат. И на условия в обоих запросах - они разные.

vk_159926832
Юзер

vk_159926832 - 25 марта 2014 14:57 -

Без GROUP BY выдает только одну таблицу, и то 3-я таблица снова выдаёт ерунду.

kricha
Юзер

kricha - 25 марта 2014 14:59 -

дальше едем, зачем вы два раза джойните одно и тоже?
 
LEFT JOIN dle_room_mymaterials  mrr ON ( mr.id = mrr.id )

vk_159926832
Юзер

vk_159926832 - 25 марта 2014 15:17 -

Честно скажу вам, что я не мастер MySQL, знаю чуть больше "азов" и всё :) Поэтому сделал по-накатаной

kricha
Юзер

kricha - 25 марта 2014 15:19 -

просто ошибки мелкие. Пишите запрос с самого начала. Там на самом деле ничего сложного, просто из маленьких деталей сложите то, что вам нужно :-)

vk_159926832
Юзер

vk_159926832 - 25 марта 2014 15:29 -

Да мне знания не позволят, может я вам скажу примерно как устроено, вы исправите недочёт?

EsviLLs
Юзер

EsviLLs - 26 марта 2014 03:06 -


SELECT m . * , TRUNCATE( SUM( mr.`num` ) / COUNT( mr.`num` ) , 1 ) AS rating, COUNT( mrr.id ) AS comments
FROM dle_mymaterials AS  m
LEFT JOIN dle_room_mymaterials AS  mr ON ( m.id = mr.id )
LEFT JOIN dle_room_mymaterials AS  mrr ON ( mr.id = mrr.id )
WHERE cat =  'Категория'
GROUP BY m.id
ORDER BY comments DESC


Вроде так, были пропущены AS

vk_159926832
Юзер

vk_159926832 - 26 марта 2014 11:18 -

К сожалению 2-я таблица (комментарии - COUNT(mr.text)) выдаёт неверные данные. код доработал:


SELECT m . * , TRUNCATE( SUM( mrr.num ) / COUNT( mrr.num ) , 1 ) AS rating, COUNT(mr.text) AS comments
FROM dle_mymaterials AS m
LEFT JOIN dle_mymaterials_comments AS mr ON ( m.id = mr.id )
LEFT JOIN dle_mymaterials_rating AS mrr ON ( mr.id = mrr.id )
WHERE cat='Категория'
GROUP BY m.id
ORDER BY comments DESC


Содержимое таблиц:

dle_mymaterials:

|id|cat|descr|....
|1|Категория|Описание....
|2|Категория|Описание....
|3|Категория|Описание....

=========================================

dle_mymaterials_rating:

|id|user_id||num|ip|
---------------------------------
|1|2|5|192.168.0.1
|1|6|3|192.168.0.1
|1|3|4|192.168.0.1
|2|2|5|192.168.0.1
|1|1|3|127.0.0.1
|4|1|5|127.0.0.1
|3|1|5|127.0.0.1
|5|1|1|127.0.0.1

=========================================

dle_mymaterials_comments

|user_id||comm_id|id|text|ip|
|6|1|1|Текст....|192.168.0.1
|3|2|1|Текст....|192.168.0.1
|39|3|1|Текст....|192.168.0.1
|31|4|2|Текст....|192.168.0.1
|1|5|2|Текст....|192.168.0.1
|51|6|2|Текст....|192.168.0.1

kricha
Юзер

kricha - 26 марта 2014 11:18 -

они необязательны.

vk_159926832
Юзер

vk_159926832 - 26 марта 2014 12:12 -

"Нормальный" дамп послал в ЛС

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх