Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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 - Fatal编程技术网

Php 从多个表中查询

Php 从多个表中查询,php,mysql,Php,Mysql,我有一个网站是人们可以喜欢的东西,我需要它,这样当有人点击一个按钮,他们可以看到每个人谁喜欢这篇文章和人谁喜欢它那里的追随者和以下计数在一个很好的名单 当您单击帖子上的按钮时,我将获得一个包含帖子id的变量,然后我想使用该id查看其与likes.post相等的位置,然后它应该从该行获取likes.users,并从用户表(users.id)获取用户信息通过该id,并通过id(follow.user)从follow表中获取跟随者和跟随者计数 我第一次尝试通过查询得到这个结果时失败了,我得到了一个“'

我有一个网站是人们可以喜欢的东西,我需要它,这样当有人点击一个按钮,他们可以看到每个人谁喜欢这篇文章和人谁喜欢它那里的追随者和以下计数在一个很好的名单

当您单击帖子上的按钮时,我将获得一个包含帖子id的变量,然后我想使用该id查看其与likes.post相等的位置,然后它应该从该行获取likes.users,并从用户表(users.id)获取用户信息通过该id,并通过id(follow.user)从follow表中获取跟随者和跟随者计数

我第一次尝试通过查询得到这个结果时失败了,我得到了一个“'WHERE 1=likes.post'at line 9”的语法错误,但我认为我做得并不正确,而且大多数情况下都会有一个更好的版本,而且考虑到使用该版本的流量,性能也是一个大问题

以下是我目前制作但不起作用的内容:

$query = "SELECT likes.user, users.*,
   COUNT(follow.follower) AS Followers,
   COUNT(follow2.following) AS Followings
   from likes
   LEFT JOIN follow ON likes.user = follow.follower
   LEFT JOIN follow AS follow2 ON likes.user = follow.follower
   LEFT JOIN users ON likes.user = users.id
   GROUP BY likes 
   WHERE $liked = likes.post
   ";

如果有人知道如何正确地做这件事,你将是一个救生员,因为我无法控制它。

这里有什么
$liked

$liked在PHP中进行求值,如果它没有值,则会导致语法错误,如
WHERE=likes.post

您应该用表的某个特定列名替换
$liked

Where子句
需要的是列名,而不是数值。而
$like
的值为1

更新

将代码更改为

WHERE likes.post =  $liked

您不应该通过连接字符串来构建查询,而应该真正使用。其中一些优点是:

  • 安全性——对SQL注入不太开放
  • 清晰——很容易看出查询的参数是什么
  • 性能——db服务器可以缓存查询,而不是每次重新编译查询
以下是原始查询的一些问题:

  • 分组依据
    位于
    之前,其中
  • 表别名
    follow2
    已创建但从未使用
  • 非分组依据,选择非聚合列

likes是post的变量,它包含应该与likes匹配的post的id。post在人们喜欢它的地方。什么语法错误?相同还是不同?还尝试将WHERE子句放在GROUP BY子句之前。谢谢,这很有帮助,但我想先让查询工作起来。我已经添加了一个原始查询的问题列表。