Php 链接表和SQL SELECT查询
我的自定义论坛中有一些链接表:Php 链接表和SQL SELECT查询,php,mysql,Php,Mysql,我的自定义论坛中有一些链接表:类别,子类别和帖子 基本上,我有人能够加起来,三个类别和五个子类别,当他们提出一个新的职位 我还可以让人们“聆听”某些类别和子类别,并将它们放在页面侧面易于访问的栏中 我的表格是这样设置的(为了方便起见,仅显示相关字段): 帖子: id INT category_id VARCHAR(12) sub_category_id VARCHAR(35) id INT name VARCHAR(20) id I
类别
,子类别
和帖子
基本上,我有人能够加起来,三个类别和五个子类别,当他们提出一个新的职位
我还可以让人们“聆听”某些类别和子类别,并将它们放在页面侧面易于访问的栏中
我的表格是这样设置的(为了方便起见,仅显示相关字段):
帖子:
id INT
category_id VARCHAR(12)
sub_category_id VARCHAR(35)
id INT
name VARCHAR(20)
id INT
name VARCHAR(20)
类别:
id INT
category_id VARCHAR(12)
sub_category_id VARCHAR(35)
id INT
name VARCHAR(20)
id INT
name VARCHAR(20)
子类别:
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}]%'
我的问题是为人们“收听”的访问栏选择子类别
$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
数组时,我希望它打印一个多维数组,其中类别作为第一个键,其值是在主类别中标记的子类别数组
我遇到的问题是,在post表的mysub\u category\u id
字段中,请记住值是以[1][2][3]
格式存储的,我需要对照subcategory字段id
检查值
我尝试了以下方法:
"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"
但它不起作用。我不知道我的查询中是否有错误,或者它是否应该工作,但如果有人能告诉我如何做,或者我的代码哪里出错了,我将不胜感激
NB。我正试图根据人们在一篇文章中将它们标记在一起的情况,找出哪些子类别出现在哪些类别中。您正面临问题,因为您不了解数据库中的一些概念 在您的例子中,您希望创建名为“多对多”的关联。 这意味着一个类别可以在多个帖子中使用,一个帖子可以由多个类别表示 要将其转换为“SQL”世界,您必须创建一个中间表 此表将存储两个表的两个标识符 例如:
-------------------
| categorisation |
-------------------
| post_id | => is the link to posts
| category_id | => is the link to categories
-------------------
创建新的post时,将在post表中创建一个新对象。但您也在表分类中创建了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)
我认为在进行项目之前,您需要在网上阅读一些关于数据库的文章;) 。。。真不敢相信。我实际上使用这个精确的解决方案来存储用户最喜欢的类别和子类别。。。由于某种原因,我完全忘记了它,因为我专注于问题,而不是解决方案!还有一个提示:您可以为类别和子类别创建一个表,其中包含列
id
、parent\u id
(可空)和name
。这样,你还可以加强每个子类别与其父类别之间的关系。由于我正在构建的论坛的性质,子类别可以属于多个类别。它是为漫画、动漫和日本文化,包括粉丝小说和粉丝艺术设计的,所以基本上,有人可能会喜欢漫画(如火影忍者)并写“粉丝小说”。火影忍者也是一部动漫!我非常松散地使用“子类别”一词!我刚刚意识到,我的问题是,我正在试图找到哪些子类别适用于哪个类别,基于它们在该子类别的帖子中的外观,所以你的答案实际上并没有回答我的问题!