where子句中的列'keywords'是不明确的

时间:2012-07-30 18:06:41

标签: sql

对,我的代码是从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
 }
 ?> 

2 个答案:

答案 0 :(得分:3)

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

如果这是您想要的,您应该将过滤器更改为where scan.keywords = 'something'

答案 1 :(得分: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;