0

我想按标题或标签在我的数据库程序和新闻中搜索我在 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%"

你看到任何错误吗?因为它返回错误,同一行多次..


表格(重要列):Programas -ID -Titulo

Promociones -ID -Titulo

-标签 -ID -Nombre

Programa_tag -id_tag -programa_tag

Promocion_tag -id_tag -promocion_tag

4

2 回答 2

1

由于ANDthen的优先级,您需要使用括号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%")

请参阅文档

于 2013-03-11T17:04:52.840 回答
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,但您需要提供更多详细信息才能进行该调用。

于 2013-03-11T17:06:06.963 回答