Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过用户名选择一个用户,然后使用其UID从另一个表中选择数据_Sql - Fatal编程技术网

Sql 通过用户名选择一个用户,然后使用其UID从另一个表中选择数据

Sql 通过用户名选择一个用户,然后使用其UID从另一个表中选择数据,sql,Sql,抱歉,如果标题有点复杂。。。我通常被ORM宠坏了,而且我的原始SQL技能显然很差 我正在写一个链接到vBulletin论坛的应用程序。用户使用他们的论坛用户名进行身份验证,查询方法很简单,只需从用户表中选择用户名即可。下半部分更为复杂。还有一个订阅表,其中有一个时间戳,但主键是用户id,而不是用户名 这是我到目前为止所做的工作: SELECT forum.user.userid, forum.user.usergroupid, forum.user.password,

抱歉,如果标题有点复杂。。。我通常被ORM宠坏了,而且我的原始SQL技能显然很差

我正在写一个链接到vBulletin论坛的应用程序。用户使用他们的论坛用户名进行身份验证,查询方法很简单,只需从用户表中选择用户名即可。下半部分更为复杂。还有一个订阅表,其中有一个时间戳,但主键是用户id,而不是用户名

这是我到目前为止所做的工作:

SELECT
    forum.user.userid,
    forum.user.usergroupid,
    forum.user.password,
    forum.user.salt,
    forum.user.pmunread,
    forum.subscriptionlog.expirydate
FROM
    forum.user
    JOIN forum.subscriptionlog
WHERE
    forum.user.username LIKE 'SomeUSER'
不幸的是,这将返回整个subscriptionlog表,这是有意义的,因为其中没有用户名字段。是否可以使用我从forum.user.userid获得的userid获取subscriptionlog行,或者需要将其拆分为两个查询


谢谢

问题在于,你是在盲目地将这两个表连接起来。您需要指定它们的相关列

我想你想要的是:

SELECT * FROM user u
   INNER JOIN subscriptionlog sl ON u.id = sl.userid
WHERE u.username LIKE 'SomeUSER'
选择*从u.id=s.id上的用户u加入订阅,其中u.username='someuser'

粗体部分是您要添加的内容,它将两个表合并为一个表,您可以从中返回结果。

试试这个

SELECT
forum.user.userid,
forum.user.usergroupid,
forum.user.password,
forum.user.salt,
forum.user.pmunread,
forum.subscriptionlog.expirydate
FROM
forum.user
INNER JOIN forum.subscriptionlog
ON forum.subscriptionlog.userid = forum.user.userid
WHERE
forum.user.username LIKE 'SomeUSER'

就这样。非常感谢。第1课为什么不使用盲连接,除非你知道你需要它。这完全被称为交叉连接,在适当的情况下可能有用——但通常不是。只需使用两个表中的id列进行内部联接,就可以了。我不知道你也可以这样分配变量。非常感谢。这些称为别名。完整的语法将包括实名和别名之间的as,我个人更喜欢这样,但您将看到这两种方法都在浮动。别名很少是必需的,但您可能会发现它们可以帮助您在适当的情况下进行键入。变量是不同的,它们看起来@likeThis.Good to know。谢谢