Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询以获取帖子,以及用户是否投票支持帖子_Php_Mysql_Sql - Fatal编程技术网

Php 查询以获取帖子,以及用户是否投票支持帖子

Php 查询以获取帖子,以及用户是否投票支持帖子,php,mysql,sql,Php,Mysql,Sql,我很难描述这一点,很可能是我让这一点变得更加困难了 基本上,我有一个充满PIN/帖子的页面,用户可以向上投票或向下投票。在一个查询中,我想得到一个pin列表,但也要连接两个表,以查看用户是否对它们进行了向上投票或向下投票 表格结构如下: pins table | id | title | +------+-------------------+ 1 Post 1 2 Post 2 3 Post

我很难描述这一点,很可能是我让这一点变得更加困难了

基本上,我有一个充满PIN/帖子的页面,用户可以向上投票或向下投票。在一个查询中,我想得到一个pin列表,但也要连接两个表,以查看用户是否对它们进行了向上投票或向下投票

表格结构如下:

pins table

|  id  |       title       |
+------+-------------------+
    1         Post 1
    2         Post 2
    3         Post 3
    4         Post 4

user_upvotes table

|  id  |  user_id  |  pin_id  |
+------+-----------+----------+
   1         1           2
   2         2           1
   3         2           3
   4         2           1

user_downvotes table

|  id  |  user_id  |  pin_id  |
+------+-----------+----------+
   1         2           2
   2         1           1
   3         1           3
   4         1           1
这是我尝试过的查询,但最终复制了页面上的PIN

SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote
FROM pins
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2
这将导致(请注意,引脚_id 1重复了两次):

从这一点开始,我只检查该值是否为NULL,如果不是,则附加一个css类,以指示它已被上选或下选

基本上,我想要上面的结果,只是不需要复制pin。如果您有更好的方法,也可以随时告诉我。

添加分组方式

SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote
FROM pins
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2
GROUP BY pin_id
这有帮助吗

 SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote
 FROM pins
 LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2
 LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2
 **GROUP BY pins.id**

这可能意味着用户对同一pin进行了两次上下投票。由于您在结果中包含投票的id,因此可以将不同的投票作为单独的记录

我想你要么要清点票数,要么就要阻止双重投票。 计数如下所示:

SELECT 
  pins.id AS pin_id, 
  title, 
  COUNT(user_upvotes.id) AS upvotes, 
  COUNT(user_downvotes.id) AS downvotes
FROM pins
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2
GROUP BY 
  pins.id

现在您可以显示计数,或者根据是否大于0显示为是或否。

您只需保留字段,并将其设置为0递增或递减计数器,用于递增投票和递减投票。您的答案是唯一识别递增投票和递减投票总数来自任意记录且可能不包含非空数据的答案。
计数
解决了此问题。
SELECT 
  pins.id AS pin_id, 
  title, 
  COUNT(user_upvotes.id) AS upvotes, 
  COUNT(user_downvotes.id) AS downvotes
FROM pins
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2
GROUP BY 
  pins.id