my `cats` table: id - title
my `posts` table: id - title - content - cat
插入帖子时选择的类别如下:
cat1id-cat2id-cat3id
例如:1-2-3或2-3-1或2-1-3
无效代码:
<?php
$id=mysql_real_escape_string($_GET['id']);
$query=mysql_query("SELECT * FROM `posts` WHERE `cat`='{$id}-'");
$query=mysql_fetch_array($query);
?>
如何显示某个类别的帖子?
答案 0 :(得分:1)
首先,don't use the mysql_*
set of functions - 不推荐使用它们。查看PDO。
其次,对于您的查询,您更容易受到数据库体系结构问题的困扰。恕我直言,你应该有一个posts
表,一个categories
表和一个post_categories
表,可以让你为一个帖子分配一个或多个类别。当你这样做时,你有更多的控制权。
最后,要回答您的问题,当您在查询中使用equals运算符时,它会查找完全匹配。要匹配部分文本,您很可能需要使用LIKE
运算符,如下所示:
$query = "
SELECT *
FROM posts
WHERE
cat LIKE '$id-%' OR
cat LIKE '%-$id-%' OR
cat LIKE '%-$id' OR
cat LIKE '$id'
";
它解决了在连接列表的开头,中间或末尾找到的类别(虽然我畏缩地看着它)。
但严重的是,看看你的数据库结构是否重构,所以你甚至没有这个问题。