如何向此查询添加多个表

时间:2012-08-08 18:55:55

标签: php sql

我有一个名为news的表,并且有两个代码片段,我想创建一个扫描keywords表的搜索引擎。连接一个表并运行得非常好,在查询中添加一个额外的表会更清晰。

我的任务是创建一个从表中返回行的搜索引擎。搜索引擎基于关键字,非常适合特定的主题,例如“纽约时报”,但如果我想输入新闻,那么所有新闻网站都按ID排序。但有时完全不同的具有关键字'news'的术语会在CNN中突然出现,这与CNN不同,因为id。使用新表,组织表格会容易得多。这样,如果输入的术语是“新闻”,则网站将按ID排序,即使它们在其他表格上发生冲突,它们仍按ID排序。

虽然我的查询与传统查询略有不同,但我不知道如何

  1. 通过UNION

  2. 添加表格
  3. 带有某种LEFT JOIN标记。

  4. 我的查询如下,我希望有人解释:a)什么是错的 b)告诉我或粘贴下面的代码

    <?php
    if( isset($_GET['k']) ){
        $k = $_GET['k'];
    }else{
        $k = '';
    }
    $k = ( isset($_GET['k']) )? trim($_GET['k']) : '';
    $terms = (strlen($k) > 0)? explode(' ', $k) : Array();
    
    
    /* The code below is from a different part of the script */
    
    $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}%'";
    }
    

2 个答案:

答案 0 :(得分:2)

我不确切地知道你想做什么,但这可能会有所帮助:

$query = " SELECT * FROM scan, news WHERE scan.news_id = news.id AND ";

$terms = array_map('mysql_real_escape_string', $terms);

foreach ($terms as $each) {
  $query .= "AND scan.keywords LIKE '%{$each}%'";
}

通过在查询中添加条件并从两个表中进行选择,在两个表之间建立联合。条件是确保两个表中的公共列是等于。

答案 1 :(得分:0)

对于左连接,请阅读此http://www.w3schools.com/sql/sql_join_left.asp

我真的不知道你在问什么。如果你能澄清你的问题,我会为你提供一个例子。感谢。