[英]mysql search query on one to many tables
我有两个这样的表(_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
+----------+------------------------------------+
这取决于您想要获得什么,并提供哪些信息。 不过,我想你想获得信息, 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';
如果您的表是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.