php - 我如何根据另一个查询从 mysql 查询中排除一些记录

标签 php mysql sql

我需要从表中排除一些记录,并显示它们,然后,我需要显示其他被排除的记录。

我有 3 个表:

+----Songs----+   +----Tags----+   +----s_in_tag----+
|     id      |   |     id     |   |       id       |
|    title    |   |    name    |   |     song_id    |
+-------------+   +------------+   |      tag_id    |
                                   +----------------+

在表 Songs 中,我存储了一个歌曲列表,表 Tags 有一个标签列表,表 s_in_tag 绑定(bind)了这两个表。

假设我在歌曲中有:1,歌曲nr1。在标签中:1、POP; 2、说唱; 3、古典。在 s_in_tag 中:1、3、2。 这意味着 song nr1 有标签 Classical

我希望能够在我的仪表板中添加/删除标签,但我如何进行正确的查询以获取所有歌曲标签,并将它们显示为选中的复选框,然后显示表中的其他标签 标记为未选中的复选框?

到目前为止我已经知道了:

SELECT * FROM tags
JOIN s_in_tag
ON tags.id = s_in_tag.tag_id
WHERE s_in_tag.song_id = *song id*
AND s_in_tag.tag_id NOT IN (SELECT tags.id FROM tags) GROUP BY tags.id

我只是尝试我在网上找到的东西,希望有人能帮助我。

最佳答案

为什么不将它们都包含在同一个查询中?

SELECT t.id, t.name, st.id IS NOT NULL AS is_checked
  FROM Tags t
  LEFT JOIN s_in_tag st ON t.id = st.tag_id AND st.song_id = [song_id];

关于php - 我如何根据另一个查询从 mysql 查询中排除一些记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077419/

相关文章:

php - Opencart 2.1如何在产品表单中设置默认类别?

使用 group by 聚合计数 { >100 万用户} 的 Mysql 查询性能变慢

重复的MySQL条件插入

c# - 如何将大型标志枚举存储到 SQL 数据库中的单个列?

php - 从 MySQL 中的相同(随机)记录中选择 2 列的最快方法是什么?

javascript - 我如何将按钮放在文本区域内并限制文本区域的大小?

php - 如何在 Laravel 5 中执行简单查询? DB::getQueryLog 给出数组

php - MySQL 上的 LIMIT 关键字与准备好的语句

java - Java 中的 UTF-8 字符在 MySQL 中变成无效字符

mysql - 如何根据两个表中的多个值删除一个表的值