我有两张表(_video,_video_tag)。
我如何构建最佳搜索查询?
我希望在此字段中搜索(标题,说明,标记)
mysql> describe _video;
+-------------+---------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| image | varchar(255) | NO | | NULL | |
| source | varchar(255) | YES | | NULL | |
| duration | int(11) | NO | | NULL | |
| title | varchar(255) | NO | | NULL | |
| slug | varchar(255) | NO | | NULL | |
| description | text | NO | | NULL | |
| order | int(11) | NO | | 0 | |
| hit | int(11) | NO | | 1 | |
| status | enum('0','1') | NO | | 1 | |
| date_add | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------------+---------------+------+-----+-------------------+----------------+
mysql> select * from _video_tag limit 5;
+----------+------------------------------------+
| video_id | tag |
+----------+------------------------------------+
| 17748 | cevahir almanca dersi |
| 17748 | genis aile |
| 17748 | ulvi |
| 17748 | cevahir |
| 17749 | oyle bir geçer zamanki
+----------+------------------------------------+
答案 0 :(得分:0)
这取决于您想要获得的信息,提供哪些信息。但是,我假设您希望在from _video
中获取具有特定标记的信息_video_tag
。然后你做
select v.* from _video_tag as vt left join _video as v on v.id = vt.video_id where vt.tag = 'Specify tag';
答案 1 :(得分:0)
如果你的表是MyISAM最好的可扩展方法是在_video表中为标题和描述制作一个FULLTEXT索引:
CREATE FULLTEXT INDEX title_desc ON _video( title, description )
和_video_tag表中的一个标记列:
CREATE FULLTEXT INDEX tag ON _video_tag( tag )
然后像这样查询:
( SELECT *,
MATCH(title, description) AGAINT('some query string') AS relevance
FROM _video
WHERE MATCH(title, description) AGAINT('some query string') )
UNION
( SELECT v.*
MATCH(vt.tag) AGAINST('some query string') AS relevance
FROM _video_tag AS vt
INNER JOIN _video AS v ON( v.id = vt.video_id )
WHERE MATCH(vt.tag) AGAINST('some query string') )
ORDER BY relevance DESC