查找db中每个单词重复的次数

时间:2015-12-16 08:56:51

标签: mysql sql drupal

使用drupal管理我的内容。我想搜索我的所有内容标题和正文,并找出每个单词在整个内容中重复的次数。

可能是通过sql查询,但我没有使用sql的经验。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此代码搜索特定字符串的 ANY 内容类型的正文字段和所有字段。您可以通过命令行运行它。假设您将其保存为" fieldsearch.php",然后您可以将其运行为:

php fieldsearch.php" myStringForWhichToSearch"

您需要填写连接数据和数据库名称。它输出匹配节点的数组,但你可以将输出格式化为你喜欢的任何东西(我推荐csv)。

<?php


//Set Parameters here
$env = "dev"; // Options [dev|prod] - Defaults to dev

$prodConnection = array(
                        "host" => "",
                        "user" => "",
                        "pass" => ""
                        );


$devConnection = array(
                        "host" => "",
                        "user" => "",
                        "pass" => ""
                        );

//Use the selected env settings
if($env == "prod"){
  $connection = $prodConnection;
} else {
  $connection = $devConnection;
}



function getTables($con, $database){
  //Get the set of field tables
  $sql = "SHOW TABLES FROM $database";
  $result = mysqli_query($con, $sql);

  if (!$result) {
      echo "DB Error, could not list tables\n";
      echo 'MySQL Error: ' . mysql_error();
      exit;
  }

  $tables = array();
  while ($row = mysqli_fetch_row($result)) {
      $tables[] = $row[0];
  }

  mysqli_free_result($result);

  return $tables;
}

function getFieldTables($con,$database){
  $allTables = getTables($con, $database);

  $fieldTables = array();
  foreach($allTables as $key => $table){

    if( isFieldTable($table) ){
      $fieldTables[] = $table;
    }
  }

  //add the common tables
  $fieldTables[] = "field_data_body";
  $fieldTables[] = "field_data_comment_body";

  return $fieldTables;
}

function isFieldTable($table){
  //echo $table . "\n";
  if( stripos($table, "field_data_field") !== FALSE){
    return TRUE;
  }
}

//Set the search term here:
if (array_key_exists(1, $argv)) {
  $searchString = $argv[1];
}
else {
  die('usage: php fieldsearch.php "search string"' . "\n");
}

  $databaseName = "myDatabaseName";

  $outArray = array();

  //Connect
    $con=mysqli_connect($connection['host'],$connection['user'],$connection['pass'],$databasePrefix.$databaseNum);
  // Check connection
  if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  //getFieldTables
  $fieldTables = getFieldTables($con, $databaseName);

  //Query each field tables data for the string in question
  foreach($fieldTables as $key => $table){

    //get Field value column name
    $valueCol = str_replace("field_data_field_", '', $table);

    $result = mysqli_query($con,"SELECT 
                                      entity_id 
                                  FROM
                                      $table
                                  WHERE 
                                    field_" . $valueCol . "_value
                                  LIKE 
                                    '%$searchString%';");

    if($result){
      while($row = mysqli_fetch_assoc($result)){
        $dataArray[$table][$row['entity_id']]['nid'] = $row['entity_id'];
      }
    }
  }

  //Add the body table
  $result = mysqli_query($con,"SELECT 
                                    entity_id 
                                FROM
                                    field_data_body
                                WHERE 
                                  body_value
                                LIKE 
                                  '%$searchString%';");

  if($result){
    while($row = mysqli_fetch_assoc($result)){
      $dataArray['field_data_body'][$row['entity_id']]['nid'] = $row['entity_id'];
    }
  }

  var_dump($dataArray);