每篇文章都可以有无限的类别。
类别会像这样保存在数据库中
示例article_category:'1','3','8'
OR
示例article_category:'2','3'
因此,当我搜索下面的列表时,可以说类别3
$category_id = $_REQUEST['category_id']; //3
$SQL = "SELECT * FROM ARTICLES WHERE article_category = '$category_id'";
如果它只是一个上面会工作正常。
我不想说,但我完全迷失了......我会使用IN吗?
答案 0 :(得分:1)
=(等于)检查完整的字符串。您想要做什么可以使用LIKE和%comodin完成(就像dir
中的文件一样*)
$SQL = "SELECT * FROM ARTICLES WHERE article_category LIKE \"%'$category_id'%\"";
但是,我建议您规范化数据库并将类别作为子表
答案 1 :(得分:1)
我实现这一点的方法是为类别创建一个表,您可能已经拥有了这个表。类似的东西:
cat_id cat_name
1 animals
2 sports
3 locations
然后创建一个表格以将文章链接到类别。类似的东西:
table artcat
article_id cat_id
1 1
1 3
2 1
2 2
2 3
上表基本上取代了您当前的字段article_category。在上面的例子中
article 1 is linked to categories 1 and 3
article 2 is linked to categories 1, 2 and 3
当您需要获取给定类别的所有文章时,您只需运行以下查询:
SELECT article_id FROM artcat WHERE cat_id=3
如果愿意,您甚至可以与文章数据库连接以输出文章标题。
我希望这会有所帮助。祝你好运!
答案 2 :(得分:0)
您可以在此处使用FIND_IN_SET
,但效率可能不高。我建议您更改表格结构并按照@jdias的回答。
如果您的article_category
保存为1,2,3
:
$SQL = "SELECT * FROM ARTICLES WHERE FIND_IN_SET('$category_id', article_category)";
或者如果它保存为'1','2','3'
:
$SQL = "SELECT * FROM ARTICLES WHERE FIND_IN_SET('\'$category_id\'', article_category)";