【问题标题】:php sql subquery not giving any result, but sql subquery isphp sql子查询没有给出任何结果,但是sql子查询是
【发布时间】:2018-01-19 17:14:42
【问题描述】:

代码:

$query  = mysqli_query($conn, "SELECT * FROM zoekkoper WHERE user_id = (SELECT id FROM USERS WHERE email='$session_email')");

while ($record = mysqli_fetch_assoc($query))
{
table output...
}

有 2 张桌子:

1) 用户 (id)

2) zoekkopers (id, user_id)

想要从表 'zoekkopers' 中选择与表 'users' id 匹配的结果。 id 和 user_id 在两个表中具有相同的值。当前登录的用户应该只能看到他自己的附加值。 我在我的 phpadmin 中尝试了 sql,这给了我正确的结果,但我无法让它在 php 中工作。如果我删除 WHERE 部分,那么我会从数据库中的所有用户那里获取所有结果值,只是希望它对每个用户更具体。

$session_email 是当前登录的用户。

在 PHP 中也试过这个 sql:

"SELECT * FROM zoekkoper JOIN users ON (user_id=id) WHERE email='$session_email'");

PHPMYADMIN:

SELECT * 
FROM  `zoekkoper` 
WHERE user_id = ( 
SELECT id
FROM users
WHERE email =  '...' ) 

【问题讨论】:

  • 利用mysql错误显示,可以判断是否有sql错误。
  • 但是您可能想将user_id = 更改为user_id IN ... 或者只使用JOIN 语法而不是嵌套查询。
  • "$session_email 是当前登录用户" 您是否已完成var_dump($session_email);确认该值是您当时期望的值?

标签: php sql phpmyadmin


【解决方案1】:

你需要像下面这样加入:-

$query  = mysqli_query($conn, "SELECT * FROM zoekkoper JOIN users ON zoekkoper.user_id= users.id WHERE users.email='$session_email'") or die(mysqli_error($conn));

【讨论】:

  • 我支持 join 方法而不是嵌套查询方法。请注意,在此答案中,字段的 table. 前缀是原始尝试失败的原因,以及此答案的 sql 正确的原因。
【解决方案2】:

我认为,你应该在 where 子句中使用IN,因为子选择可能返回多个结果;

$query  = mysqli_query($conn, "SELECT * FROM zoekkoper WHERE user_id IN (SELECT id FROM USERS WHERE email='$session_email')");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2019-07-07
    相关资源
    最近更新 更多