从数据库中选择字段中的id


select from database where id in Field

我有一个新闻数据库,我在每个新闻中使用多个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)错误。

  1. SELECT * FROM news where $id_newscats IN (cats)错误。

    这是正确的语法
    $select_news = $mysqli->query("SELECT * FROM news where cats IN ($id_newscats)")
  2. 在查询中使用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) ");