【问题标题】:foreach loop for fulltext search in boolean mode用于布尔模式下全文搜索的 foreach 循环
【发布时间】:2018-07-06 16:40:11
【问题描述】:

我有 php 代码,它从 words 表中获取 names of toys,并使用布尔模式全文搜索在 toys 表的 toys_text 字段中匹配这些单词,并显示 names of toysuserscounts网页上的玩具和唯一身份用户

玩具名称可以是一个单词,也可以是单词的组合。我们想从toys 中获取这些结果,其中toys_text 字段包含words 表中单词组合的所有单词

(例如 - 如果 words 表有名为 blue car 的条目 - bluecar 都应该出现在 toystoys_text 字段中以进行匹配)。数据库随着时间的推移而变化,新玩具的用户被添加,而过时的玩具则用户被删除。

我在将数组正确转换为字符串以输入到布尔全文搜索时遇到问题。我使用foreach 循环并希望输出 +(blue) +(car) 但它只是将 +(car) 插入到布尔全文查询中。

echo $query1 输出

`select COUNT(*) as 'count', COUNT(DISTINCT tw.screen_name) AS 'cnt' from 
tweets tw join users us on tw.user_id=us.user_id WHERE MATCH (tweet_text) 
AGAINST (' +(car)' IN BOOLEAN MODE)`

虽然我希望查询输出为

`select COUNT(*) as 'count', COUNT(DISTINCT tw.screen_name) AS 'cnt' from 
tweets tw join users us on tw.user_id=us.user_id WHERE MATCH (tweet_text) 
AGAINST ('+(blue) +(car)' IN BOOLEAN MODE)`

这是我的代码 -

<?php
$query = "SELECT * FROM words ORDER BY `words`.`words` 
ASC";
$result = mysqli_query($con, $query);

$i = 1;            
while($row = mysqli_fetch_array($result)){                        
    $Word = $row['words'];
    $WordsArr = explode(" ", $row['words']);
    $query = "";

       if(count($WordsArr) > 1){
          foreach ($WordsArr as $value) {
                    $value1 = " +"."(".$value."*".")";
                    }
           $query1 = "select COUNT(*) as 'count', COUNT(DISTINCT 
           t.name) AS 'cnt' from toys t WHERE MATCH (toys_text) AGAINST 
          ('$value1' IN BOOLEAN MODE)";
        }else{
        $query1 = "select COUNT(*) as 'count', COUNT(DISTINCT t.name) AS 
       'cnt' from toys t WHERE 
        MATCH (toys_text) AGAINST ('$WordsArr[0]* IN BOOLEAN MODE')";
        }               
        $Data1 = mysqli_query($con, $query1);
        $total1 = mysqli_fetch_assoc($Data1);                     
            ?>                  
        <tr>
          <td><?php echo $i;?></td>
          <td><?php echo $row['words'];?></td>
          <td><a href="showtoys.php?word=<?php echo 
          urlencode($Word); ?>" target="_blank"><?php echo 
          $total1['count']; ?></a></td>
          <td><a href="showtoys.php?keyword=<?php echo urlencode($Word); 
          ?>" target="_blank"><?php echo $total1['cnt']; ?></a></td>                   
        </tr>
            <?php $i++;} ?> 

【问题讨论】:

    标签: php mysql full-text-search


    【解决方案1】:

    你的问题是你没有连接字符串:

    foreach ($WordsArr as $value) {
        $value1 = " +"."(".$value."*".")";
    }
    

    应该是:

    $value1 = '';
    foreach ($WordsArr as $value) {
        $value1 .= " +"."(".$value."*".")";
    }
    

    【讨论】:

    • 感谢您的回复。它现在正在工作。您能否为这种类型的连接提供一些文档?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2015-02-14
    • 2011-10-30
    相关资源
    最近更新 更多