mysql 使用值进行查询(无子选择)

mysql query using values (no subselect)

由于永久使用 ORM,我不知道如何编写此查询,但我需要在没有 ORM 的情况下编写它。

表格设计:

用户:

|id|username|...

端口:

|id|user_id|port|

我的应用程序获得了用户名,现在我需要使用用户 ID 找到匹配用户名的所有端口以获取端口。

执行 JOIN 查找由 userparam(或任何您称呼的)用户指定的端口:

select u.id, u.username, p.id, p.user_id, p.port
from users u
  join ports p on u.id = p.user_id
where u.username = :userparam

(您可以从 SELECT 列表中删除不需要的列。)

users:
    id|username|...

ports:
    id|user_id|port|

想想最后的 SELECT 行。只需放置一个占位符即可开始

select count(*)

然后正式开始。请问我需要什么 table 才能获取数据 FROM?

FROM users, ports

这将(从概念上)创建一个新的 table,其中包含每个用户与每个端口匹配的行。
我如何过滤掉这个新 table 中没有的所有数据 适用于我的查询?忽略除 WHERE 之外的所有内容,你告诉它匹配

WHERE user.id == ports.user_id 

您可以认为这是对巨大 table 中的行进行过滤,该巨型 table 由您在 FROM 子句中输入的所有 table 的所有行组成。

现在你已经拥有了这些行的所有内容,你可以SELECT你感兴趣的新 table 中的哪些列。

假设您想要返回任何 port.id (s)。

SELECT port.id
FROM users, ports
WHERE user.id == ports.user_id 

更好的语法,使 WHERE 部分靠近 FROM 部分
当你有很多 table 时,这变得很重要,看起来像这样

SELECT port.id
FROM users join ports ON user.id == ports.user_id