由于永久使用ORM,我不知道如何编写此查询,但我需要在没有ORM的情况下编写它。
表格设计:
用户:
| ID |用户名| ...
端口:
| ID | USER_ID |端口|
我的应用获取了用户名,现在我需要使用用户的ID来查找匹配用户名的所有端口以获取端口。
答案 0 :(得分:1)
执行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
列表中删除不需要的列。)
答案 1 :(得分:1)
users:
id|username|...
ports:
id|user_id|port|
最后考虑SELECT
行。只是把一个占位符开始
select count(*)
然后实际开始。问我需要哪些表来获取数据FROM
?
FROM users, ports
这将(从概念上)创建一个包含每个用户与每个端口匹配的行的新表
如何过滤掉这个新表中没有的所有数据
适用于我的查询?忽略除WHERE
之外的所有内容,告诉它匹配
WHERE user.id == ports.user_id
你可以认为这是对你在FROM
子句中放入的所有表的所有行中的巨表中的行进行过滤。
现在您拥有了所有这些行,您可以SELECT
从您创建的新表格中找到您感兴趣的列。
假设您想要返回任何port.id(s)。
SELECT port.id
FROM users, ports
WHERE user.id == ports.user_id
一种更好的语法,可以使WHERE
部分保持在FROM
部分附近
当你有很多表时这很重要
SELECT port.id
FROM users join ports ON user.id == ports.user_id