SQL'Like'导致重复内容

时间:2010-07-12 06:11:04

标签: php .htaccess mysql

我正在使用MySQL和'like'查询来查找页面。我需要能够以这种方式做事,但这意味着这些页面将是相同的:

www.mysite.com/blog/hello-world

www.mysite.com/blog/hello-worl

他们都工作,并提出相同的页面。如何(可能使用.htaccess?)可以解决这个问题? :\

非常感谢

编辑:

PHP -

if(isset($_GET['title'])) {
                $blogtitle=mysql_real_escape_string($_GET['title']);
                $title_two = strtolower(str_replace("-", " ", $blogtitle));
                $title_two = strtolower(str_replace("?", "", $title_two));
                $title_two = mysql_real_escape_string($title_two);

                $postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;";
                $postquery = mysql_query($postmatch) or die ("Could not match data because ".mysql_error());
                $blogtitle=mysql_result($postquery,0,"title");

                $title="$blogtitle";

3 个答案:

答案 0 :(得分:1)

你能说明你需要这样做的原因吗?

你需要“he​​llo-world”和“hello-world123”匹配,而不是“hello-worl”吗?

否则,我想不出你想要使用LIKE但不想让“hello-worl”匹配的任何理由。

答案 1 :(得分:1)

为什么不替换它:

$postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;";

......用这个?

$postmatch = "select * from blog where title LIKE '$title_two' LIMIT 1;";

这样你无论大小写如何都在搜索,但不管周围的角色如何都不匹配。

答案 2 :(得分:0)

你有这个网址:www.mysite.com/blog/hello-world WHERE hello world 是搜索字符串

我建议你将它们存储到像

这样的数组中
$keyWrd = array();
$keyWrd = strtolower($_GET['keywd']); // MUST DO VALIDATION
$keyWrd = explode(" ",$keyWrd);
$TotalKeyVal = count($keyWrd);

if(!empty($keyWrd[0]))
    {
        $SrcQryStr = "SELECT id,title,body FROM tbl_name WHERE";
        for($i=0;$i<$TotalKeyVal;$i++)
            {
                $SrcQryStr .= " title LIKE '%";
                $SrcQryStr .= $keyWrd[$i];
                $SrcQryStr .= "%'";

                $SrcQryStr .= ' OR ';

                $SrcQryStr .= " body LIKE '%";
                $SrcQryStr .= $keyWrd[$i];
                $SrcQryStr .= "%'";

                if(($TotalKeyVal-1)!=$i) $SrcQryStr .= ' OR ';
            }
        $SrcQryStr .= " ORDER by created_date DESC";

现在您拥有 $ SrcQryStr 查询字符串您可以在if(!empty($keyWrd[0]) && MORE HERE)上创建更多条件在这里,您可以使用implode或多个implode而不是for循环。

现在为什么%。$ keywd。%

示例:

STRING:欢迎来到Stack Overflow!

搜索关键字:ack

它会显示匹配,因为在堆栈 WHILE%上找到了确认。$ keywd。%

未显示匹配,因为没有以ack WHILE $ keywd开头的单词。%

它会不显示匹配,因为没有确切的单词ack WHILE $ keywd