我想通过标题或标签搜索我的数据库程序和新闻我在mysql中有这段代码:
Select *
from promociones,promocion_tag,programa_tag,tags,programas
WHERE tags.nombre='STH'
AND tags.id=programa_tag.id_tag
AND programa_tag.id_programa=programas.id
OR tags.nombre='STH'
AND tags.id=promocion_tag.id_tag
AND promocion_tag.id_promocion=promociones.id
OR promociones.titulo LIKE "%STH%"
OR programas.titulo LIKE "%STH%"
你看到有什么错误吗?因为它返回错误,同一行多次..
表格(重要栏目): 计划成 -ID -Titulo
的Promociones -ID -Titulo
标签都有效 -ID -Nombre
Programa_tag -id_tag -programa_tag
Promocion_tag -id_tag -promocion_tag
答案 0 :(得分:1)
由于AND
然后OR
的优先级,您需要使用括号。使用显式JOIN
语法也会有所帮助。
...
AND tags.id=programa_tag.id_tag
AND (programa_tag.id_programa=programas.id
OR tags.nombre='STH')
AND tags.id=promocion_tag.id_tag
AND (promocion_tag.id_promocion=promociones.id
OR promociones.titulo LIKE "%STH%"
OR programas.titulo LIKE "%STH%")
答案 1 :(得分:0)
为了更好的可读性(以及更容易调试),我已经改写了SELECT以使用JOINS(另外我在OR表达式周围添加了括号:
SELECT * FROM tags
JOIN programa_tag ON tags.id=programa_tag.id_tag
JOIN programas ON programa_tag.id_programa=programas.id
JOIN promocion_tag ON promocion_tag.id_tag = tags.id
JOIN promociones ON promociones.id = promocion_tag.id_promocion
WHERE tags.nombre='STH' AND
(promociones.titulo LIKE "%STH%" OR programas.titulo LIKE "%STH%")
如果没有进一步了解您的数据库,我只能猜测JOIN是否应该实际上是LEFT JOINS。此外,此SELECT实际上可能需要UNION,但您需要提供更多详细信息才能进行该调用。