Php 如何内部联接三个表并获得计数
我有三张桌子:Php 如何内部联接三个表并获得计数,php,mysql,Php,Mysql,我有三张桌子: members (id, name, surname, usr_img) user_uploads (imgID, user_id, filename, description, up_time) img_likes (likeID, img_id, user_id) 我需要从user_uploads中获取所有信息,并使用img_id从成员处获取上传者信息,并在img_likes表中进行2次计数,检查会话变量中的user_id和img_id是否存在,并获取img总喜欢数 S
members (id, name, surname, usr_img)
user_uploads (imgID, user_id, filename, description, up_time)
img_likes (likeID, img_id, user_id)
我需要从user_uploads中获取所有信息,并使用img_id从成员处获取上传者信息,并在img_likes表中进行2次计数,检查会话变量中的user_id和img_id是否存在,并获取img总喜欢数
SELECT user_uploads.* AS uu, members.*, COUNT(img_id, user_id) AS usr_liked, COUNT(img_id) AS total_likes
FROM user_uploads
INNER JOIN members AS m ON m.id = uu.user_id -- owner info
INNER JOIN img_likes AS il ON il.img_id = uu.imgID AND il.user_id = ? -- check if logged in user already liked
INNER JOIN img_likes AS ilt ON ilt.img_id = uu.imgID -- total likes
GROUP BY img_id, user_id
ORDER BY up_time DESC
我不需要从img_id中获取任何信息,只需计算行数。我不知道是否需要内部连接,也许是为了指定用户id
要获得计数:
$usr_liked = row['usr_liked'];
$total_likes = rwo['total_likes'];
这样行吗
编辑:添加新查询:
SELECT
user_uploads.*,
(
SELECT *
FROM members m
WHERE m.id = user_uploads.user_id
),
(
SELECT COUNT(*)
FROM img_likes t
WHERE t.img_id = user_uploads.imgID AND t.user_id = ?
) AS user_likes,
(
SELECT COUNT(*)
FROM img_likes t
WHERE t.img_id = user_uploads.imgID
) AS total_likes
FROM user_uploads
ORDER BY up_time DESC
您可以使用子查询: 选择 uu.*, m、 *, 选择COUNTt* 来自img_喜欢t 其中t.img_id=uu.imgID和t.user_id=? 如用户所愿, 选择COUNTt* 来自img_喜欢t 其中t.img_id=uu.imgID 如你所愿 从…起 用户上传为uu 内部连接成员为m ON m、 id=uu.user\u id 订购人 uu.up\U时间描述
谢谢你的回答。由于一些错误,我修改了它。如果我加入members表,我会得到一个错误,所以我只是像子查询一样添加了它。但它给出了一个错误:操作数应该包含1columns@ChazyChaz:错误已经告诉您一切,子查询应该只返回一个结果。像以前一样返回成员内部联接。p、 我已经编辑了我的答案以获得完整的查询。是的,是我的错,我忘了重命名表。谢谢,我在工作!