我有一个MySQL表“news
”,其中包含一个名为“keyword
”的字段。我基于此在网站上获取不同的部分。例如:
对于技术部分,我使用:
SELECT * from news where keyword like '%tech%'
对于最近的文章部分我使用:
SELECT * from news
现在的问题是,当加载这两个部分时,我会看到重复的文章。我如何防止这种舞会发生?
答案 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;
}
}