【发布时间】:2014-11-17 06:07:26
【问题描述】:
我在尝试将一个空表(cmets 表)加入我现有的准备好的语句时遇到问题。
这是完美的工作:
// prepare images
if ($stmt = $mysqli->prepare(" SELECT uu.*, m.*,
(
SELECT COUNT(*)
FROM img_likes AS t
WHERE t.img_id = uu.imgID AND t.user_id = ?
) AS user_likes,
(
SELECT COUNT(*)
FROM img_likes AS t
WHERE t.img_id = uu.imgID
) AS total_likes
FROM user_uploads AS uu
INNER JOIN members AS m ON m.id = uu.user_id
ORDER BY up_time DESC")) {
$stmt->bind_param('i', $user_id);
$stmt->execute(); // get imgs
// foreach print images
// working as expected
}
而且我不知道为什么如果我加入另一个空表(img_cmets),则不会打印图像...如果我在表中添加一行并刷新页面,则会打印一个图像...
我正在尝试但它不起作用的声明是这样的:
SELECT uu.*, m.*, ic.*,
(
SELECT COUNT(*)
FROM img_likes AS t
WHERE t.img_id = uu.imgID AND t.user_id = ?
) AS user_likes,
(
SELECT COUNT(*)
FROM img_likes AS t
WHERE t.img_id = uu.imgID
) AS total_likes
FROM user_uploads AS uu
INNER JOIN members AS m ON m.id = uu.user_id
INNER JOIN img_comments AS ic ON ic.img_id = uu.imgID
ORDER BY up_time DESC
为什么只根据表格行数打印图像?我也尝试过 LEFT JOIN,但我对此不太熟悉。我只在其他脚本中使用 INNER JOIN,从来没有遇到过这样的问题。
如果对我的查询进行任何优化,我将不胜感激。
【问题讨论】:
-
查看此连接示例 - stackoverflow.com/a/19267314/689579。正如您将在中心看到的那样,
INNER JOIN只会在表格相交的地方产生结果。