2016-04-14 13 views
0

私はニュースのデータベースを持っていますので、私は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']; 

} 
ニュースのテーブルに提出されたこの $id_newscats内部の猫は私はニュースのデータを取得するには、このコードをtraiedここで、iは、データベースからニュースを選択したい

$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>"; 
    } 
} 

しかし、私はこの猫のIDの5,2,7を持っていればこのコードで問題を抱えています。それは私にこのIDのニュース5を与え、2,7を無視しますixそのすべてのニュースを選択してください。このIDは$id_newscatsのcatsフィールドにあります。ありがとうございます。

+3

にこの

$select_news = $mysqli->query("SELECT * FROM news where $id_newscats IN (cats)"); 

を得ました。ジャンクション・テーブルが優れている理由は、コメントで説明するには時間がかかりすぎます。 –

+1

この行を削除してください: '$ rows_news = $ select_news-> fetch_array(MYSQL_ASSOC);'すでに 'while()'ループ内の '$ rows_news'に値を設定しているので、これは必須ではありません。 – Marcus

+0

@Marcus私はそれを削除しましたが、これは問題ではありません –

答えて

0

私はあなたではなく行のIDを格納よりも、適切な接合テーブルを持っているあなたのデータ構造を修正する必要があり、この

変更にこの

$select_news = $mysqli->query("SELECT * FROM news where FIND_IN_SET('$id_newscats', cats) "); 
0

INクエリの順序が間違っています。

$select_news = $mysqli->query("SELECT * FROM news where cats IN ($id_newscats)") 
+0

id_newscats内のid_newscatsはcatではありません –

+0

データベース構造に 'news'テーブルと' news_cats'テーブルの間のマッピングがあるため、これは簡単に修正できません。そのため、指定したカテゴリのマッピングテーブルからすべてのエントリを取得してから、そのマッピングからニュースIDをクエリします。 – rinukkusu

1

構文(1)と論理(2)の両方のエラーがあるように見えます。

  1. SELECT * FROM news where $id_newscats IN (cats)が間違っています。

    これは正しい構文です。
    $select_news = $mysqli->query("SELECT * FROM news where cats IN ($id_newscats)")
  2. あなたのクエリでparanthesisを使用してください。

    SELECT * FROM news_cats where show_home = '1' and (kind = 1 or kind = order by ord_show asc"

+0

しかし、id_newscats内のcatはid_newscats内のcatsではありません –

0

あなたはwhileループの外にINリストを構築されていません!あなたは1行しか得られません。内側のループでは、検索するのに1つのidしか持たないので、INの構文は必要ありません。 いずれにしても間違っています

あなたの外側のクエリも見えます。間違っていると思います。

$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>"; 
    } 
} 
関連する問題