2014-05-13 10 views
0

是否可以检查sql以查看是否有任何记录包含字符串中的任何单词?php检查sql数据库以查看它是否包含与字符串类似的文本

例如

<? 
$tags = "rock indie pop britpop alternative"; 


$result1 = mysql_query("SELECT * FROM `Stations` WHERE `tags` LIKE '%$tags%'"); 


$num_rows1 = mysql_num_rows($result1); 


echo $num_rows1; 

?> 

将返回1个结果。

此刻,由于字符串有多个单词,它不会返回任何内容。

杰米

+0

在SO上查看此答案,可能有助于http://stackoverflow.com/a/9435291/或引导您朝着正确的方向前进。 –

回答

1

你可以做这样的事情:

$tags = explode(' ', $tags); 

$tags = implode("%' OR `tags` LIKE '%", $tags); 

这应该给你的东西的影响:

SELECT * FROM `Stations` WHERE `tags` LIKE '%rock%' OR `tags` LIKE '%indie%' OR `tags` LIKE '%pop%' OR `tags` LIKE '%britpop%' OR `tags` LIKE '%alternative%' 

所以:

<? 
    $tags = "rock indie pop britpop alternative"; 

    $tags = explode(' ', $tags); 

    $tags = implode("%' OR `tags` LIKE '%", $tags); 

    $result1 = mysql_query("SELECT * FROM `Stations` WHERE `tags` LIKE '%$tags%'"); 

    $num_rows1 = mysql_num_rows($result1); 

    echo $num_rows1; 
+0

我想你可能在'OR'之后错过了'tags'的'$',或者它应该是怎么样? –

+1

“OR”后面的'tags'是指DB中的列。不过,我确实注意到,由于崇高,我在最终答案中留下了一些有关“件”的参考。我现在修复了这个问题。 – Samsquanch

+0

好的。我刚刚遇到了一些麻烦。 –

0

的容易,但不好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等,等等。

相关问题