-2

对,我下面的代码用于从 MYSQL 表中获取行,并在用户输入与存储的关键字匹配时显示它们。最近我决定拥有一张长表是愚蠢的,有时,使用相似的关键字,较高的 id 会排在首位。如果我有多个表格,其中包含“新闻”“电影”等特定部分,我应该避免冲突。

  <?php
  if( count($terms) == 0){ // If no terms entered, stop.
echo "No Search Terms Entered.";
    }else{      

 // connect
  $connect = mysql_connect("cust-mysql-123-05", "uthe_774575_0001", "rooney08") or   die('Couldn\'t connect to MySQL Server: ' . mysql_error());
    mysql_select_db("theqlickcom_774575_db1", $connect ) or die('Couldn\'t Select the database: ' . mysql_error( $connect ));

/* Query Statement Building - Terms together */
$query = " SELECT * FROM scan WHERE "; 

$terms = array_map('mysql_real_escape_string', $terms);
$i = 0; 
foreach ($terms as $each) {
      if ($i++ !== 0){
            $query .= " AND ";
      }
      $query .= "keywords LIKE '%{$each}%'";
}



$query = mysql_query($query) or die('MySQL Query Error: ' . mysql_error( $connect ));
$numrows = mysql_num_rows($query);
if ($numrows > 0) {

      while ($row = mysql_fetch_assoc($query)) {
            $id = $row['id'];
            $title = $row['title'];
            $description = $row['description'];
            $keywords = $row['keywords'];
            $link = $row['link'];

        echo '<h2><a class="ok" href="' . $link . '">' . $title . '</a></h2>' . PHP_EOL;
                    echo '<p class="kk">' . $description . '<br><br><span class="keywords">' . PHP_EOL;            
                    echo '<p><a class="okay" href="' . $link . '">' . $link . '<br><br><span class="keywords">' . PHP_EOL;
                      }
} else {
    /* Query Statement Building - Terms Separate */
    $query = " SELECT * FROM scan WHERE "; 

    $terms = array_map('mysql_real_escape_string', $terms);
    $i = 0; 
    foreach ($terms as $each) {
          if ($i++ !== 0){
                $query .= " OR ";
          }
          $query .= "keywords LIKE '%{$each}%'";
    }

    $query = mysql_query($query) or die('MySQL Query Error: ' . mysql_error( $connect ));
    $numrows = mysql_num_rows($query);
    if ($numrows > 0) {

          while ($row = mysql_fetch_assoc($query)) {
                $id = $row['id'];
                $title = $row['title'];
                $description = $row['description'];
                $keywords = $row['keywords'];
                $link = $row['link'];

                echo '<h2><a class="ok" href="' . $link . '">' . $title . '</a></h2>' . PHP_EOL;
                echo '<p class="kk">' . $description . '<br><br><span class="keywords">' . PHP_EOL;            
                echo '<p><a class="okay" href="' . $link . '">' . $link . '<br><br><span class="keywords">' . PHP_EOL;
                  }

    } else {
          echo "No results found for \"<b>{$k}</b>\""; 
    }
}
//disconnect
 }
 ?> 
4

2 回答 2

3

因为keywords扫描和新闻表中都有一个字段,而您的where子句类似于where keywords = 'something'

你应该改变你的过滤器,where scan.keywords = 'something'如果那是你想要的。

于 2012-07-30T18:07:33.377 回答
0
$terms = array_map('mysql_real_escape_string', $terms); 

$keywords = join(',', terms);

$query = "SELECT * FROM scan WHERE keywords IN " . $keywords . " UNION ALL SELECT * FROM news WHERE keywords IN " . $keywords;
于 2012-07-30T18:11:28.033 回答