0

tbl_categorie からカテゴリを選択するための PHP コードがあります。これで、記事に複数のカテゴリを含めることができるフォームで複数選択ができました。データベースに値を挿入するときに、複数のカテゴリの値を 1 つの列/属性に格納したいと考えています。ID_CAT 属性は、コンマ (,) で区切られた tbl_categorie のカテゴリ ID のみを格納します。1 つの DB に 2 つのテーブルがあり、

 tbl_blog:                           
  ID_BLOG    ID_CAT               TITLE          ARTICL        DATE
  1          1,3                  title1         article1      2013-03-04
  2          4,10                 title2         article2      2013-03-04 
  3          3,6                  title3         article3      2013-03-04

 tbl_categorie:                           
  ID_CAT    NOM_CAT               
  1          HTML                
  2          CSS                
  3          DESIGN
  4          PHP
  5 ..

implode() ステートメントを使用しましたが、最初に 1 つの記事に 2 つの ID_CAT を追加するのに問題がありますが、ID_CAT のタイプを int から varchar に変更すると機能します。記事を追加するプロセスは次のとおりです。

Article::creatArticle(0,$_POST['title'],implode(', ', $_POST['id_categorie']),$_POST['article']);

これは class_article から記事を追加する関数です:

/**
 * function créeArticle
 */ 
public static function creatArticle($id_article,$title,$id_categorie,$article)
{
    global $db; 
    $req = $db->prepare("INSERT INTO blog (ID_BLOG,TITLE,ID_CAT, ARTICLE,DATE) VALUES ('',:title,:id_categorie,:article,'".date('Y-m-d')."')"); 
    $ok = $req->execute(Array('title' =>$title,'id_categorie' => $id_categorie,'article' => $article));
     return $db->lastInsertId();
    //$erreur = $req->errorInfo();
}

今、私は各記事にあるすべてのカテゴリを取得するのに問題があります.

 <?php
    foreach(Article::getAllArticle()as $blog ){
        $article= new Article($blog->ID_BLOG);
        $categorie = new Categorie($article->getIDCategorie());

        echo'
                    <tr>';
                            echo '<td><input type="checkbox" /></td>';
                            echo '<td>'.$article->getTitlearticle().'</td>';
                            echo '<td>'.$categorie->getNomCategorie().'</td>';
                            echo '<td>'.$article->getDatearticle().'</td>';
                            echo '<td>35</td>';
                            echo ' <td class="actions">';
                            echo '<a href="javascript:editArticle('.$article->getIDarticle().');" title="Edit this content"><img src="img/icons/actions/edit.png" alt="" /></a>';
                            echo ' <a href="javascript:deleteArticle('.$article->getIDarticle().');" title="Delete this content"><img src="img/icons/actions/delete.png" alt="" /></a></td>';
                            echo '</tr>';

                        } ..

私は私が爆発()ステートメントを使用するか、ループを作成する必要があることを知っていますが、私はそれを理解することができません:( 、そして私はID_CATのタイプがvarcharであるべきかどうか疑問に思っています問題を起こす?ありがとう!

4

2 に答える 2

0

この問題は簡単に解決できます。tbl_blogとtbl_catagoryのプライマリIDの情報を格納する新しいテーブルを作成できます。利点は、ブログのカテゴリをもう1つ選択すると、ブログのすべてのカテゴリの情報が保存されることです。テーブルは次のようになります.....


tbl_combine:

ID_COMB    ID_Blog    ID_Cat
1          1          2
2          1          1
3          1          3
4          2          3
5          2          2
6          3          1
7          3          2
8          3          3


上記では、3つのブログと3つのカテゴリを紹介します。tbl_combine は、選択したブログの各ブログカテゴリのプライマリIDを各行に格納できます。したがって、ブログの無制限のカテゴリを挿入できます。分解または分解機能は必要ありません。

次に、任意のブログカテゴリを取得できます。クエリは次のようになります。






SELECT
      (SELECT category_name FROM tbl_catagory 
       WHERE id_cat=A.id_cat) 
       AS catagory_name 
FROM tbl_combine 
AS A 
WHERE id_blog=$blog_id





tbl_blogのIDを保存するだけで、tbl_catagoryテーブルはtbl_combineであることに注意してください。速度は低下しません。

于 2013-03-06T21:45:31.230 に答える
0

自分が何をしているのか、何をしたいのかを理解するのは難しいです。CSV ファイルから結果を取得しているのか、データベースから結果を取得しているのかわかりません。

データベースからのものである場合、データベーステーブルを正規化する必要があることがわかります。ブログとカテゴリの間にリンク テーブルを作成します。これにより、結果を簡単に取り戻すことができます。単純な結合 SQL は、カテゴリ内のすべての記事を取得するか、記事が関連付けられているすべてのカテゴリを取得します。

tbl_blog:                           
  ID_BLOG                TITLE          ARTICL        DATE
  1                      title1         article1      2013-03-04
  2                      title2         article2      2013-03-04 
  3                      title3         article3      2013-03-04

 tbl_categorie:                           
  ID_CAT    NOM_CAT               
  1          HTML 

tbl_blogcat
 ID_BLOG    ID_CAT 
 1           1
 1           3
 2           4
 2           10

今は少し余分な作業かもしれませんが、将来的にはそれだけの価値があります。カテゴリをカンマ区切りの文字列として保存すると、検索が難しくなります。

于 2013-03-06T21:23:15.813 に答える