的容易,但不好swer是:
foreach(explode(' ', $tags) as $tag) {
// SELECT * FROM Stations WHERE tags LIKE '%$tag%'
}
或构建的东西产生类似的查询:
SELECT *
FROM Stations
WHERE tags LIKE '%$tag1%'
OR tags LIKE '%$tag2%'
OR tags LIKE '%$tag3%'
...
但解决方案,其中表是正确的正常化,是不可能把你的服务器,以自己的膝盖试图做通配符对字符串匹配是这样的:
TABLE stations
st_id UNSIGNED INTEGER NOT NULL AUTO_INCREMENT,
st_name VARCHAR(255),
...
PRIMARY KEY(st_id),
INDEX(st_name)
TABLE tags
tag_id UNSIGNED INTEGER NOT NULL AUTO_INCREMENT,
tag_name VARCHAR(64) NOT NULL,
PRIMARY KEY(tag_id),
UNIQUE(tag_name)
TABLE station_tags
st_id UNSIGNED INTEGER,
tag_id UNSIGNED INTEGER,
PRIMARY KEY(st_id, tag_id),
INDEX(tag_id),
FOREIGN KEY fk_st_id (st_id) REFERENCES stations(st_id) ON DELETE CASCADE,
FOREIGN KEY fk_tag_id (tag_id) REFERENCES tags(tag_id) ON DELETE CASCADE
这让你定义一个标签一次,分配无限标签无限站,集中管理的标签,使用适当的indexe s等,等等。
在SO上查看此答案,可能有助于http://stackoverflow.com/a/9435291/或引导您朝着正确的方向前进。 –