我有一个新闻数据库,我在每个新闻中使用多个cats,所以我在数据库中有一个名为cats的文件,我在其中插入数据,就像1,5,8,2
一样。这个数据是cats id。
我用这个代码从数据库中选择猫
$select_newscats = $mysqli->query("SELECT * FROM news_cats where show_home = '1' and kind = 1 or kind = 2 order by ord_show asc");
while ($rows_newscats = $select_newscats->fetch_array(MYSQL_ASSOC)){
$id_newscats = $rows_newscats ['id'];
$title_newscats = $rows_newscats ['title'];
$ord_show_newscats = $rows_newscats ['ord_show'];
$icon_newscats = $rows_newscats ['icon'];
$kind_newscats = $rows_newscats ['kind'];
$description_newscats = $rows_newscats ['description'];
}
我想从数据库中选择新闻,在这个数据库中,cat中的$id_newscats
在新闻表中存档,所以我训练了这个代码来获得新闻数据
$select_newscats = $mysqli->query("SELECT * FROM news_cats where show_home = '1' and kind = 1 or kind = 2 order by ord_show asc");
while ($rows_newscats = $select_newscats->fetch_array(MYSQL_ASSOC)){
$id_newscats = $rows_newscats ['id'];
$title_newscats = $rows_newscats ['title'];
$ord_show_newscats = $rows_newscats ['ord_show'];
$icon_newscats = $rows_newscats ['icon'];
$kind_newscats = $rows_newscats ['kind'];
$description_newscats = $rows_newscats ['description'];
$select_news = $mysqli->query("SELECT * FROM news where $id_newscats IN (cats)");
while ($rows_news = $select_news->fetch_array(MYSQL_ASSOC)){
$id_new = $rows_news ['id'];
$title_news = $rows_news ['title'];
echo "<div>{$title_news}</div>";
}
}
但我对这个代码有一个问题,它只选择第一个,例如,如果我有这个cats id的5,2,7
,它只给我这个id 5
的新闻,而忽略2,7
,所以我如何解决这个问题,并在cats字段中选择这个id为$id_newscats
的所有新闻,谢谢。
看起来同时存在语法(1)和逻辑(2)错误。
SELECT * FROM news where $id_newscats IN (cats)
错误。
这是正确的语法$select_news = $mysqli->query("SELECT * FROM news where cats IN ($id_newscats)")
-
在查询中使用Paradishesion。
SELECT * FROM news_cats where show_home = '1' and (kind = 1 or kind = order by ord_show asc"
您的IN
查询顺序错误。
$select_news = $mysqli->query("SELECT * FROM news where cats IN ($id_newscats)")
您没有在外部while循环中构建IN列表!您得到一行,然后在内部循环中只有一个id可供搜索,因此不需要IN
语法无论如何都是错误的
你的外部查询看起来也错了,我想你需要在OR周围加一些括号。
$select_newscats = $mysqli->query("SELECT *
FROM news_cats
WHERE show_home = '1'
and ( kind = 1 or kind = 2 )
ORDER BY ord_show asc");
while ($rows_newscats = $select_newscats->fetch_array(MYSQL_ASSOC)){
$id_newscats = $rows_newscats ['id'];
$title_newscats = $rows_newscats ['title'];
$ord_show_newscats = $rows_newscats ['ord_show'];
$icon_newscats = $rows_newscats ['icon'];
$kind_newscats = $rows_newscats ['kind'];
$description_newscats = $rows_newscats ['description'];
// amended query, you only have one $id_newscats
// each time round this outer loop
$select_news = $mysqli->query("SELECT *
FROM news
WHERE id = $id_newscats");
while ($rows_news = $select_news->fetch_array(MYSQL_ASSOC)){
$id_new = $rows_news ['id'];
$title_news = $rows_news ['title'];
// no need for {} round scalar variables
//echo "<div>{$title_news}</div>";
echo "<div>$title_news</div>";
// or you could just dothis and dont bother
// creating an unecessary scalar variable
//echo "<div>{$rows_news['title']}</div>";
}
}
我得到了这个
更改此
$select_news = $mysqli->query("SELECT * FROM news where $id_newscats IN (cats)");
进入这个
$select_news = $mysqli->query("SELECT * FROM news where FIND_IN_SET('$id_newscats', cats) ");