我有PHP代码从tbl_categorie中选择类别,现在我在一个文章可以有多个类别的表单中有多个选择。在数据库中插入值时,我想在一个列/属性中存储多个类别值。其中ID_CAT属性仅存储以逗号(,)分隔的tbl_categorie的类别ID。 我在一个数据库中有两个表,
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 ..
我首先要为一篇文章添加两个ID_CAT,尽管我使用了implode()语句,但是当我将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();
}
现在我有问题需要获取每篇文章中应有的所有类别,这就是我在后台使用魔法get()获取文章的方法,她只返回第一个值专栏:
<?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>';
} ..
我知道我必须使用explode()语句或制作循环,但我无法弄清楚如何:(,我对ID_CAT的类型有疑问应该是varchar会产生问题吗? thanx!
答案 0 :(得分: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
现在可能需要额外的工作,但将来也值得。将您的类别存储为逗号分隔的字符串会使搜索变得困难。
答案 1 :(得分:0)
这个问题可以轻松解决,你可以创建一个新表来存储 tbl_blog和tbl_catagory 的主要id的信息。好处是当您选择一个博客类别时,它将存储您博客的每个类别的信息。桌子看起来像......
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和tbl_catagory 表的ID是 tbl_combine 它不会慢