如何根据最匹配的外键 ID 对结果进行排名?
例如:
$tag_ids = '1, 2, 3';
$sql = "SELECT *
FROM `posts` p
LEFT JOIN `tags_posts` tp
ON tp.`post_id` = p.`id`
WHERE
tp.`tag_id` IN (". $tag_ids .")";
表:posts
、tags
、tags_posts
(连接表)
一篇文章可以有多个标签
一个标签可以属于多个帖子
如何对给定的帖子 ($tag_ids) 中具有最匹配标签 ID 的帖子进行排名
编辑:
I need to use this in a larger UNION query
$sql_1 = "SELECT `id`, `date`, ... FROM `first_table` ... LEFT JOIN ... GROUP BY `first_table`.`id`";
$sql_2 = "SELECT `id`, `date`, ... FROM `second_table` ... LEFT JOIN ... GROUP BY `second_table`.`id`";
$sql_3 = "SELECT `id`, `date`, ... FROM `third_table` ... LEFT JOIN ... GROUP BY `third_table`.`id`";
$sql = " SELECT * FROM (
" . $sql_1 . "
UNION
" . $sql_2 . "
UNION
" . $sql_3 . "
) as t
ORDER BY t.`date` DESC
";
最佳答案
按 tag_id 分组,然后对每个组进行计数。最大的计数是最多的匹配。
关于php - 如何通过外键匹配对sql结果进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28485579/