php - 如何通过外键匹配对sql结果进行排名

标签 php mysql

如何根据最匹配的外键 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 .")";

表:poststagstags_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/

相关文章:

php - Symfony2 - 在哪里可以找到服务构造函数可能的参数列表?

javascript - 使用 AJAX 更改 CSS 样式且无需重新加载

mysql - SQL查询检查速率限制

mysql - 如何将多列连接为多列?

mysql - Azure中的Joomla-添加VirtueMart,错误502

php - Laravel只搜索7天的记录

php - Laravel 查询生成器 - 如何求和?

php - 在 PHP 中回显一个表的总和

python - MySQL 使用 Python 删除表中的行

mysql - mariadb 如何解析用户的主机名?