php - 对顶部匹配的标签进行排序

标签 php mysql sql

我从数据库中获取标签,并且想要对结果顶部的表 tag_posts 中具有匹配项的标签进行排序。它接近工作,但由于按 c_p_id 分组,我得到了重复项。但是,如果我按顺序从组中删除 c_p_id 有时会获取错误的行。使用某些 IF EXIST 选项会更有意义吗?

我希望标签像这样列出:

TAG B
TAG A
TAG C

如果 TAG-B 在 tag_posts 中点击。

SELECT c_p_id, t_id, t_title
FROM tags
LEFT JOIN projects
ON p_id = " . $p_id . "
LEFT JOIN tag_posts
ON tp_t_id = t_id
LEFT JOIN cats
ON c_id = tp_c_id
AND c_p_id = p_id
GROUP BY t_id, c_p_id
ORDER BY c_p_id DESC, t_title ASC

//编辑。我想出了一个不同的解决方案来完成我想要的事情:

SELECT t_id, t_title, 
    (SELECT 1 FROM tag_posts
        INNER JOIN cats
            ON c_id = tp_c_id
        INNER JOIN projects
            ON p_id = c_p_id
        WHERE tp_t_id = t_id
            AND p_id = " . $p_id . "
        LIMIT 1) used
FROM tags
ORDER BY used DESC, t_title ASC

最佳答案

解决方案:

SELECT t_id, t_title, 
    (SELECT 1 FROM tag_posts
        INNER JOIN cats
            ON c_id = tp_c_id
        INNER JOIN projects
            ON p_id = c_p_id
        WHERE tp_t_id = t_id
            AND p_id = " . $p_id . "
        LIMIT 1) used
FROM tags
ORDER BY used DESC, t_title ASC

关于php - 对顶部匹配的标签进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51532341/

相关文章:

mysql - 如果找到的值少于 2 个,则忽略选择

sql - Microsoft Access 中可用于 "CREATE TABLE"的字段类型

php - 删除 Sentry 帐户激活检查

php - Codeigniter 3.0.6 hmvc 不适用于单个模块

MySQL:列数与值数不匹配。语法错误

mysql - 在 sql 查询中使用 "SELECT one,two,three"而不是 "SELECT *"真的更快吗?

sql - 如何将具有相同主键的多个表连接到一个每个键一行的表?

php - 使用 API 平台创建报告端点 (https ://api-platform. com)

javascript - VueJS Axios POST 在页面传递变量时返回 NULL

mysql - JPA 的 Map<KEY, VALUE> JPQL 查询失败