私はタグシステムに取り組んでいます、それがすべきことはあなたがクエリと選択されたタグを持つことができるということです、例えば、jquery
のタグ。クエリに関連するスクリプトと、タグを持つスクリプトのみを表示する必要があります。これはデータベースのレイアウトです。javascript
library
スクリプトテーブル:
+-----------+---------------+
| script_id | name |
+-----------+---------------+
| 1 | jQuery |
| 2 | Sencha Touch |
| 3 | Codeigniter |
| 4 | Google Chrome |
| 5 | memcached |
| 6 | PHP |
| 7 | MooTools |
| 8 | node.js |
| 9 | jQuery Mobile |
+-----------+---------------+
タグテーブル:
+--------+-------------+-------------+
| tag_id | name | url_name |
+--------+-------------+-------------+
| 1 | JavaScript | javascript |
| 2 | Library | library |
| 3 | PHP | php |
| 4 | MySQL | mysql |
| 5 | Cache | cache |
| 6 | HTML | html |
| 7 | Open source | open-source |
+--------+-------------+-------------+
タグ付きテーブル:
+-----------+--------+-----------+
| tagged_id | tag_id | script_id |
+-----------+--------+-----------+
| 1 | 1 | 1 | # javascript -- jQuery
| 2 | 2 | 1 | # library -- jQuery
| 3 | 1 | 9 | # javascript -- jQuery mobile
+-----------+--------+-----------+
SQLを実行すると、それでも検出されますが、タグがjQuery Mobile
含まれていないため、SQLが検出されないはずです。選択したタグを満たす必要がある結果を制限するために、SQLが必要です。library
jQuery
これは私のSQLです:
SELECT scripts.script_id,
scripts.name
FROM
(
scripts scripts
LEFT OUTER JOIN tagged tagged ON tagged.script_id = scripts.script_id
LEFT OUTER JOIN tags tags ON tags.tag_id = tagged.tag_id
)
WHERE MATCH(scripts.name) AGAINST ('jquery*' IN BOOLEAN MODE) AND ( tags.url_name = 'javascript' OR tags.url_name = 'library' )
GROUP BY script_id
ORDER BY scripts.name
LIMIT 0, 25
それは戻ります:
+-----------+---------------+
| script_id | name |
+-----------+---------------+
| 1 | jQuery |
| 9 | jQuery Mobile |
+-----------+---------------+
に変更OR
すると、何も返されません。または、タグからAND
角かっこを削除しても、何も返されません。(
)
クエリにタグを制約させるにはどうすればよいですか?