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]
У меня есть основной запрос: < /p> [code] 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 [/code] Примечание - мне нужны все данные о комментариях, но теперь для ясности я просто использую Select mt.media_id, mt.title, ct.comment [/b]