查询多个表

时间:2012-02-22 09:55:26

标签: php mysql

我有一个网站,人们可以喜欢的东西,我需要它,以便当有人点击按钮时,他们可以看到每个喜欢该帖子的人和喜欢它的人跟随者,并在一个不错的列表中计数。

当你点击帖子上的按钮时,我会得到一个包含帖子id的变量,然后我想使用那个id来查看它等于likes.post的位置然后它应该从该行获取likes.users通过该id获取用户表(users.id)中的用户信息,并通过id(follow.user)从后续表中获取用户follwering和followers count。

我第一次尝试进行查询以使此失败严重,并且我在第9行“'WHERE 1 = likes.post'时出现语法错误”,但我认为我还没有正确地执行此操作并且大多数都是更好的版本,考虑到将使用它的流量,性能也是一个大问题。

这是我目前所做的但不起作用:

$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
   ";

如果有人知道如何正确地做到这一点,那么你将成为一个救命的人,我无法理解它。

2 个答案:

答案 0 :(得分:0)

这里有$liked什么?

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

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

Where clause期待列名,而不是数值。而$liked的值为1。

<强>更新

将您的代码更改为

WHERE likes.post =  $liked

答案 1 :(得分:0)

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

  • 安全性 - 对SQL注入不太开放
  • 清晰度 - 很容易看到查询的参数是什么
  • 性能 - 数据库服务器可以缓存查询,而不是每次重新编译

以下是原始查询的一些问题:

  • group by出现在where
  • 之前
  • 已创建表别名follow2但从未使用过
  • group by,选择了非聚合列