MySQL присоединяетсяMySql

Форум по Mysql
Ответить
Anonymous
 MySQL присоединяется

Сообщение Anonymous »

У меня есть основной запрос: < /p>

Код: Выделить всё

 SELECT mt.media_id, mt.title,
SUM(DISTINCT sht.share) as share_count
FROM $grouped_media_table mt
LEFT JOIN $share_table sht ON sht.media_id = mt.media_id AND sht.title = mt.title
WHERE mt.media_id = %d AND mt.title = %s
GROUP BY mt.media_id, mt.title
< /code>
Grouped_Media_Table: < /p>
CREATE TABLE $grouped_media_table (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`media_id` int(11) unsigned DEFAULT NULL,
`title` varchar(300) DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `title` (`title`)
< /code>
share_table < /p>
CREATE TABLE $share_table (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`share` int(11) unsigned DEFAULT '0',
`media_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,
`title` varchar(300) DEFAULT NULL,
`c_date` datetime,
PRIMARY KEY (`id`),
INDEX `media_id` (`media_id`)
< /code>
Это возвращает одну строку для media_id = 5 и title = "foo" < /p>
и другой запрос: < /p>
SELECT ct.id, ct.comment, ct.comment_parent_id, ct.reported, ct.user_id, ct.user_display_name, ct.avatar, ct.c_date, SUM(vt.vote) AS vote, MAX(vt.user_id = %d) AS user_voted,
MAX(CASE WHEN vt.user_id = %d THEN vote END) AS user_vote
FROM $comments_table as ct
LEFT JOIN $votes_table vt on ct.id = vt.comment_id
WHERE ct.media_id=%d AND ct.title=%s
GROUP BY ct.id
ORDER BY ct.c_date DESC
< /code>
Это возвращает все строки для media_id = 5 и title = "foo" < /p>
comments_table: < /p>
CREATE TABLE $comments_table (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`media_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,
`user_display_name` varchar(100) DEFAULT NULL,
`avatar` varchar(300) DEFAULT NULL,
`origtype` varchar(20) DEFAULT NULL,
`title` varchar(300) DEFAULT NULL,
`url` varchar(300) DEFAULT NULL,
`c_date` datetime,
`comment` longtext DEFAULT NULL,
`comment_parent_id` int(11) unsigned DEFAULT NULL,
`reported` tinyint(1) DEFAULT 0,
PRIMARY KEY (`id`),
INDEX `media_id` (`media_id`)
< /code>
hotes_table: < /p>
CREATE TABLE $votes_table (
`comment_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,
`vote` tinyint(1) DEFAULT 0,
INDEX `comment_id` (`comment_id`)
< /code>
Мои запросы хорошо работают самостоятельно. [b] есть ли способ объединить это в один запрос? chare_count возвращается, так что это соединение работает хорошо. < /p>
 SELECT mt.media_id, mt.title, SUM(DISTINCT sht.share) as share_count, ct.comment
FROM $grouped_media_table mt
LEFT JOIN $share_table sht ON sht.media_id = mt.media_id AND sht.title = mt.title
LEFT JOIN (SELECT ct.id, ct.media_id, ct.title, comment, ct.comment_parent_id, ct.reported, ct.user_id, ct.user_display_name, ct.avatar, ct.c_date, SUM(vt.vote) AS vote,
MAX(vt.user_id = %d) AS user_voted,
MAX(CASE WHEN vt.user_id = %d THEN vote END) AS user_vote
FROM $comments_table as ct
LEFT JOIN $votes_table vt on ct.id = vt.comment_id
WHERE ct.media_id = %d AND ct.title=%s
GROUP BY ct.id
ORDER BY ct.c_date DESC
) as ct ON ct.media_id = mt.media_id AND ct.title = mt.title
WHERE mt.media_id = %d AND mt.title = %s
GROUP BY mt.media_id, mt.title
Примечание - мне нужны все данные о комментариях, но теперь для ясности я просто использую Select mt.media_id, mt.title, ct.comment [/b]

Подробнее здесь: https://stackoverflow.com/questions/796 ... tiple-rows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»