-2

右、以下のコードは、MYSQL テーブルから行を取得し、ユーザー入力が保存されているキーワードと一致したときにそれらを表示するためのものです。最近、1 つの長いテーブルを持つのはばかげていると判断しました。似たようなキーワードを使用すると、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 に答える