如何在数据库字段中的任何位置显示多个关键字的计数结果

时间:2017-04-04 07:06:23

标签: php mysql

我们有一个页面tcount.php,我们使用php脚本在mysql数据库的文本字段中的任何地方获取BOTH keyword1和keyword2的计数。计数显示为超链接。在此之后,我们希望如果有人点击超链接,他们将在showt.php页面中看到详细结果,显示数据库的那些行仅对应于包含BOTH关键字的那些文本字段。

第二页showt.php的网址就像

http://www.example.com/page.php?keyword=keyword1+keyword2

但问题是它只显示那些将keyword1和keyword2放在一起的结果。

例如,keyword1是car,keyword2是cap,我们的文本字段如下 -

  1. 汽车上限

  2. 汽车最佳上限

  3. car new

  4. 然后,我们希望它显示1.和2.作为结果,但它只显示否。结果页面中有1个。

    请帮忙。

    修改

    这是第1页中的代码tcount.php -

    $kewyWordQ = $db->query("SELECT keywords FROM Table1 ");
    
    <?php
                    while($row = $kewyWordQ->fetch(PDO::FETCH_ASSOC))
                    {$keyWord = $row['keywords'];
                        $keyWordsArr = explode(" ", $row['keywords']);
                        $countData = array();
    
                        $keyIndex = 0;
                        $tIndices = array();
                        $tArr = array();
                        $tIndices[] = "-1";
                        foreach($keyWordsArr as $keyword)
                        {
                            $t = $db->query("SELECT user_name FROM Table2 WHERE    
      t_text LIKE '%$keyWordsArr[$keyIndex]%'");
                            $tArr[] = $t;
                            while($row2 = $tweet->fetch(PDO::FETCH_ASSOC))
                            {
                                $found = TRUE;
                                foreach($keyWordsArr as $keyword1)
                                {
                                    $ret = strpos(strtolower($row2['t_text']),  
         strtolower($keyword1));                                    
                                    if(($ret == 0) &&  
         strcmp(strtolower($row2['t_text'][0], strtolower($keyword1)[0])))
                                    {
                                        $found = FALSE;
                                        break;
                                    }
                                }
    
                                if($found == TRUE)
                                {
                                    $ret = strpos($tIndices, $row2['t_id']);
                                    if(($ret == 0) && strcmp($tIndices[0], 
         $row2['t_id']))
                                    {
                                        $tIndices[] = $row2['t_id'];
                                        $countData[] = $row2['user_name'];
                                    }
                                }
                            }
                            $keyIndex++;
                        }
                    ?>
    
                    <tr><td><?php echo $row['keywords'];?></td>
                    <td><a href="showt.php?keyword=<?php echo 
        urlencode($keyWord); ?>" target="_blank"><?php echo count($countData); ? 
        ></a></td>
                    <td><a href="showt.php?keyword=<?php echo 
            urlencode($keyWord); ?>" target="_blank"><?php echo 
          count(array_unique($countData)); ?></a></td>
                    </tr>
                    <?php } ?> 
    

    这是第2页showt.php中的代码 -

          $keywords = $_GET['keyword'];
          $sql="SELECT col1, col2, col3 from t AS s INNER JOIN users AS p ON 
          s.user_name=p.user_name where s.t_text LIKE '%$keywords%'
    

2 个答案:

答案 0 :(得分:0)

查询的WHERE语句应如下所示:

WHERE my_text_field LIKE ?

,绑定参数应为%$keyword1%$keyword2%

为了定义$keyword1$keyword2变量,您可以执行以下操作:

list($keyword1, $keyword2) = explode(' ', $_GET['keyword']);

或者,如果您有多个可能的关键字,则可以使用"%" . implode('%', explode(' ', $_GET['keyword'])) . "%"

答案 1 :(得分:0)

有两种方式 一个是通过php和mysql做的很难的方式

$keyword = $_GET('keyword');
$keywordArray = explode(" ",$keyword);
$queryString = "";
foreach($keywordArray as $key=>$value) {
    $queryString .= " column_name LIKE '%$value%' OR";
}
"SElECT * FROM table WHERE ".$queryString

第二个是mysql本身,即全文搜索