php - mySQL 查询连接关联表匹配 this AND this OR this

标签 php mysql left-join

我需要一点帮助。不知道为什么我无法理解这个。

我有一个表格,其中包含歌曲、流派以及两者之间的关联。

SONGS
song_id
song_name
active (0,1)

GENRE
genre_id
genre_name (rock,jazz,classical,newage,opera)

ASSOC
song_id
genre_id

我可以像这样进行简单的搜索...

SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND a.genre_id = 1

还有像这样的多重搜索。

SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND (a.genre_id = 1 
   OR a.genre_id = 2)

但是,如果我想得到 1 和 2 OR 3 怎么办?这不起作用。

SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND a.genre_id = 1
AND (a.genre_id = 2 
   OR a.genre_id = 3)

预先感谢您的帮助。我有一种感觉,我只是以错误的方式看待这个问题。

最佳答案

试试这个,

   SELECT s.song_name, s.song_id
    FROM (songs s)
    LEFT JOIN assoc a ON s.song_id = a.song_id
    WHERE s.active = 1
    AND (a.genre_id = 1
    OR a.genre_id = 2 
       OR a.genre_id = 3)

你的where子句是错误的,因为

AND a.genre_id = 1 AND (a.genre_id = 2 OR a.genre_id = 3)

这意味着在一行中你有两个选择

a.genre_id=1 and a.genre_id=1 or
a.genre_id=1 and a.genre_id=3

每行只有一个 Genre_id,因此同一行中不能有 2 个值

关于php - mySQL 查询连接关联表匹配 this AND this OR this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938597/

相关文章:

php - 使用 pecl 在 linux 上为 lampp 设置 memcached

php - Preg_Replace YouTube URL(带有或不带有开始时间变量)

javascript - 如何使用 javascript/php 自动搜索 `<img src=` [image] 的目录?

Mysql 共享主键同一列的键概念

mysql - 过滤来自两个左连接的数据

mysql POINT 数据类型上的左连接

php - 如何安全地存储网站的配置文件?

PHP 脚本在准备好的语句中的 execute() 处停止执行

mysql - 我删除了用户表!我怎样才能恢复它?

mysql - 按日期排序,直到达到特定日期,然后按 id DESC 排序