如何为未序列化的类别编写查询

时间:2014-05-30 11:23:30

标签: php mysql

所以我的函数post()会做下一件事:

$category = serialize($postdata['post_category']);
        $query = "
                 INSERT INTO posts(post_title, post_content, post_category)
                 VALUES ('$postdata[post_title]', '$postdata[post_content]', '$category')
                 ";   

将序列化数据插入到数据库中,但是在调用函数时只显示那些具有相同类别的帖子时出现问题,其函数如下所示:

public function cat($cat){
        global $db;
        $query = "
                 SELECT * FROM posts
                 WHERE post_category LIKE '%$cat%'
                 ";
        return $db->select($query);
    }   

所以我的问题是:将这个特定情况下的非序列化数据插入数据库是否更好(以及如何做到这一点)或者更好地提取序列化数据然后反序列化它以显示某些特定帖子(与之前相同,尝试了几个选项,并没有运气实现正确的结果)?

2 个答案:

答案 0 :(得分:1)

If you want to store the categories array, you can use implode(',', $postdata['post_category'])

$category = implode(',', $postdata['post_category']);
$query = "
            INSERT INTO posts(post_title, post_content, post_category)
            VALUES ('$postdata[post_title]', '$postdata[post_content]', '$category')
"; 

and if you want to search the post based on some category you can use

public function cat($cat){
        global $db;
        $query = "
                 SELECT * FROM posts
                 WHERE find_in_set(".$cat.",post_category)
                 ";
        return $db->select($query);
}  

答案 1 :(得分:0)

如果$postdata['post_category']是一个数组,您还可以在同一列中插入多个类别:

$category = ',' . implode(',', $postdata['post_category']) . ',';
$query = "
     INSERT INTO posts(post_title, post_content, post_category)
     VALUES ('$postdata[post_title]', '$postdata[post_content]', '$category')
     ";

请注意,您最后应该comma,并且类别字符串的开头如此:,1,2,3,4,

从类别中选择帖子:

public function cat($cat){
    global $db;
    $query = "
             SELECT * FROM posts
             WHERE post_category LIKE ',$cat,'
             ";
    return $db->select($query);
}

但是这种方法不允许您从多个类别中选择帖子。

注意:您应该考虑学习使用多个表格和JOIN。一个用于发布的表,一个用于类别的表和一个用于post_to_categories的表,其中所有类别及其特定帖子都被链接。