我的自定义论坛中有一些链接表:categories
,sub_categories
和posts
我还让人们“倾听”某些类别和子类别,并将它们放在页面侧面易于访问的栏中。
我的表格因此设置(仅显示相关字段):
帖子:
id INT
category_id VARCHAR(12)
sub_category_id VARCHAR(35)
类:
id INT
name VARCHAR(20)
- 行业标准:
id INT
name VARCHAR(20)
在我的posts
表格中,我按照以下格式按照ID存储设置的类别和子类别:
category_id [2][4][8]
sub_category_id [1][2][3][4][5]
因此使我能够在PHP中执行以下查询并根据类别和子类别获取帖子:
SELECT * FROM posts WHERE category_id LIKE '%[{$id}]%' AND sub_category_id LIKE '%[{$id2}]%'
我遇到的问题是为人们“倾听”的访问栏选择sub_categories
...
$sql = "SELECT title, id FROM categories";
$query = mysql_query($sql);
$list = array();
while ($row = mysql_fetch_assoc($query)){
$list[$row['title']] = array();
$sql = "SELECT sub_categories.title FROM sub_categories, posts WHERE (category_id LIKE '%[{$row['id']}]%') AND (????) LIMIT 0,100";
$query = mysql_query($sql);
while($result = mysql_fetch_assoc($query)){
$list[$row['title']][] = $result['title'];
}
}
print_r($list);
显然你可以看到我被困(????)
的位置,但在我解释我想要做什么之前,我会解释我正在寻找的输出是什么。
当我打印$list
数组时,我希望它打印一个以类别为第一个键的多维数组,其值是一个已在主类别中标记的子类别数组
我遇到的问题是,在帖子表的sub_category_id
字段中,请记住值以[1][2][3]
格式存储,我需要根据子类别字段{{1}检查值}。
我尝试了以下内容:
id
但它没有用。我不知道我的查询中是否有错误,或者它是否应该有效,但如果有人能告诉我如何操作或我的代码出错,我将不胜感激!
NB。我试图找出哪些"SELECT sub_categories.title FROM sub_categories, posts WHERE (category_id LIKE '%[{$row['id']}]%') AND (sub_category_id LIKE '%[sub_categories.id]%') LIMIT 0,100"
出现在哪个sub_categories
基于人们在帖子中一起标记它们。
答案 0 :(得分:3)
你面临的问题是因为你不了解数据库中的一些概念......
在您的情况下,您想要创建名为“多对多”的关联。 这意味着一个类别可以在很多帖子中使用,一个帖子可以用很多类别来表示。
要将其转换为“SQL”世界,您必须创建一个中间表。
此表将存储两个表的标识符。
例如:
-------------------
| categorisation |
-------------------
| post_id | => is the link to posts
| category_id | => is the link to categories
-------------------
创建新帖子时,可以在表格帖子中创建新对象。但您也可以在表分类中创建N条记录。
如果要检索应用于此帖子的类别,可以执行以下查询:
SELECT post.id, post.name
FROM post
INNER JOIN categorisation on (post.id = categorisation.post_id)
INNER JOIN category ON (categorisation.category_id = category.id)
我认为您需要在进入项目之前阅读网络上有关数据库的一些文章;)