使用in_array控制论坛帖子类别的输出

时间:2018-02-08 07:08:54

标签: php

我正在尝试创建一个供我内部使用的论坛。

我为帖子设置了类别,因为我希望能够控制人们看到的类别。

输出代码为:

$data_query = mysqli_query($this->con, "SELECT * FROM posts WHERE deleted = 'no' ORDER BY id DESC");

我的想法是这样的:

 $cat_query = mysqli_query($this->con, "SELECT subs FROM users WHERE  username='$userLoggedIn'");
    $cat_array = mysqli_fetch_array($cat_query);
    $c_arr = explode(",", $cat_array);
    $post_cat = mysqli_query($this->con, "SELECT post_category FROM posts WHERE deleted='no'");

if(in_array($post_cat, $c_arr){
$data_query = mysqli_query($this->con, "SELECT * FROM posts WHERE (post_category=$post_cat AND deleted = 'no') ORDER BY id DESC");
}

然而,当我这样做时,它不起作用。

基本上我需要data_query只返回categories数组中类别的帖子。我无法弄明白。

编辑:数据库中的表结构

用户表:

   CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(25) NOT NULL,
  `last_name` varchar(25) NOT NULL,
  `username` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `signup_date` date NOT NULL,
  `profile_pic` varchar(255) NOT NULL,
  `num_posts` int(11) NOT NULL,
  `num_likes` int(11) NOT NULL,
  `user_closed` varchar(3) NOT NULL,
  `friend_array` text NOT NULL,
  `city` text NOT NULL,
  `state` text NOT NULL,
  `country` text NOT NULL,
  `subs` varchar(500) NOT NULL,
  PRIMARY KEY (`id`)
   ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

帖子表:

   CREATE TABLE `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `body` text NOT NULL,
  `added_by` varchar(60) NOT NULL,
  `user_to` varchar(60) NOT NULL,
  `date_added` datetime NOT NULL,
  `user_closed` varchar(3) NOT NULL,
  `deleted` varchar(3) NOT NULL,
  `likes` int(11) NOT NULL,
  `post_category` varchar(50) NOT NULL,
  `image` varchar(500) NOT NULL,
  PRIMARY KEY (`id`)
   ) ENGINE=MyISAM  DEFAULT CHARSET=latin1

希望这有帮助

1 个答案:

答案 0 :(得分:1)

尝试在一个查询中编写逻辑,在数据库端执行逻辑时不要使用php函数

$query = "SELECT * FROM posts WHERE deleted='no' AND post_category IN (SELECT subs FROM users WHERE  username='$userLoggedIn' ORDER BY id DESC)";
$result = mysqli_query($this->con, $query);

修改

首先,我要说存储逗号分隔字符串是非常糟糕的做法。列表在一行中,您应该为subs创建新表。

但在这种情况下你应该这样做:

 <?php
 $cat_query = mysqli_query($this->con, "SELECT subs FROM users WHERE  username='$userLoggedIn'");
 if($cat_query){
    $row = mysqli_fetch_assoc($car_query);
    $subs = $row['subs'];

    $post_cat_query = "SELECT post_category FROM posts WHERE deleted='no'";
    $result = mysqli_query($this->con, $post_cat_query);

    if($result){
        $c_arr = array();
        while($row = mysqli_fetch_assoc($result)){
            array_push($c_arr, $row['post_category']);
        }

        if(in_array($post_cat, $c_arr){
            $data_query = mysqli_query($this->con, "SELECT * FROM posts WHERE (post_category=$post_cat AND deleted = 'no') ORDER BY id DESC");

    }


 }