0

db プログラムとニュースをタイトルまたはタグで検索したいのですが、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

プロモーション -ID -タイトル

-タグ -ID -名前

Programa_tag -id_tag -programa_tag

プロモーションタグ -id_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 に答える