我正在尝试创建一个供我内部使用的论坛。
我为帖子设置了类别,因为我希望能够控制人们看到的类别。
输出代码为:
$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
希望这有帮助
答案 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");
}
}