如何防止从同一个MySQL表中加载重复项?

时间:2014-06-03 16:18:08

标签: php mysql

我有一个MySQL表“news”,其中包含一个名为“keyword”的字段。我基于此在网站上获取不同的部分。例如:

对于技术部分,我使用:

SELECT * from news where keyword like '%tech%'

对于最近的文章部分我使用:

SELECT * from news 

现在的问题是,当加载这两个部分时,我会看到重复的文章。我如何防止这种舞会发生?

2 个答案:

答案 0 :(得分:1)

尝试

SELECT * from news where not exists (SELECT * from news where keyword like '%tech%')

所以你不应该在第二个结果中得到关于主题教学的新闻

答案 1 :(得分:1)

这是一个简单的解决方案:

首先创建一个包含所有主题的数组:

$topics = array(
    "home",
    "tech",
    "cake",
    "animals",
    "gynecologogy",
    "recipes"
);

然后在您的页面上添加此函数,它将为您创建SQL查询:

function makeQuery($topic, $topics){
    $q = "SELECT * from news where keyword like '%".$topic."%' AND ";
    foreach($topics as $t){
        if($t == $topic){
            continue;
        }
        $q .= "keyword NOT LIKE '%".$t."%' AND ";
    }
    $q = rtrim($q, " AND ");
    return $q;
}

然后您可以使用该功能创建查询。例如,如果您仍然使用(已弃用,我知道)mysql_*函数,您可以将该函数用作查询,如下所示:

$Q = mysql_query(makeQuery("tech", $topics));

使用单一查询

如果要从单个查询中对它们进行排序,可以使用类似的方法。这只是一个例子。您必须修改代码以满足您的需求。

$articles = array();
$Q = mysql_query("SELECT * FROM `news`");
while($res = mysql_fetch_assoc($Q)){
    if(strpos($res['news'], 'tech') !== false){
        $articles['tech'] = $res;
    }
}