gpt4 book ai didi

php - 在 while 循环中使用 JOIN sql 查询

转载 作者:行者123 更新时间:2023-11-29 07:54:37 27 4
gpt4 key购买 nike

我有这个查询:

    $r = $dbh->prepare("
SELECT ur.user, urs.*
FROM xeon_users_rented as ur
JOIN xeon_users_rented_stats as urs ON ur.user_by=urs.urs_user
WHERE ur.user_by=:user
"
);
$r->bindParam(':user', $userdata['username']);
$r->execute();

我正在循环播放:

while($referralData=$r->fetch()):

echo $referralData['id'];

endwhile;

我的问题是,循环不运行。如果我在循环内放置任何内容,它是否不会显示。

原始查询(没有 JOIN)如下所示:

$r = $dbh->prepare("SELECT * FROM xeon_users_rented WHERE user_by=:user");

出了什么问题?

最佳答案

您的用户需要存在于两个表中。

当您在 ur.user_by=urs.urs_user 上加入 xeon_users_rentedxeon_users_rented_stats 时,这意味着您将合并来自两个的行ur.user_by=urs.urs_user 时的表。因此合并后的行将具有相同的用户。由于您的用户仅存在于 1 个表中,因此在加入时,xeon_users_rented 中包含您用户的行无法在另一个表中找到要合并的行,因为另一个表没有该用户。

例如:

表A

user      age
------------------
john 20
ricky 24
paul 30

表B

user      someStat
------------------
john 100
paul 200
paul 300

如果我们在 TableA.user = TableB.user 上将 TableA 与 TableB 连接起来,我们将得到

TableA.user     TableA.age    TableB.user    TableB.someStat
---------------------------------------------------------------
john 20 john 100
paul 30 paul 200
paul 30 paul 300

对于 TableA 中的每一行,它将查找 TableB 中具有相同用户的所有行,并将这些行合并到结果表中。由于 Ricky 不在 TableB 中,因此他不在结果中。

现在,如果我们执行LEFT JOIN,这将保证连接左侧表(本例中为 TableA)的所有行,并将填充右侧的数据,其中可用。

TableA.user     TableA.age    TableB.user    TableB.someStat
--------------------------------------------------------------
john 20 john 100
ricky 24 NULL NULL
paul 30 paul 200
paul 30 paul 300

现在结果包含Ricky,但由于Ricky不在TableB中,所以TableB对应的列被NULL填充

关于php - 在 while 循环中使用 JOIN sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com