Php 一对多SQL查询

Php 一对多SQL查询,php,mysql,database,Php,Mysql,Database,我是sql新手。已经编写了一段时间的程序,但总是找到一种不使用数据库的方法。我知道你很愚蠢 我有一个关于一对多sql查询的问题 我正在建立一个网站,这样我可以了解数据库多一点。所以我有一个数据库和两个表。一个保存用户信息,另一个保存该用户的硬件。只有一个用户,但该用户可以有多个硬件。我可以编写查询来显示用户信息,没有问题。我似乎无法理解的是如何编写查询,以便将所有硬件与该用户关联并显示它 这是我的表格示例 用户表 user_id ------ primary key first_name

我是sql新手。已经编写了一段时间的程序,但总是找到一种不使用数据库的方法。我知道你很愚蠢

我有一个关于一对多sql查询的问题

我正在建立一个网站,这样我可以了解数据库多一点。所以我有一个数据库和两个表。一个保存用户信息,另一个保存该用户的硬件。只有一个用户,但该用户可以有多个硬件。我可以编写查询来显示用户信息,没有问题。我似乎无法理解的是如何编写查询,以便将所有硬件与该用户关联并显示它

这是我的表格示例

用户表

user_id  ------ primary key

first_name

last_name
user_id      first_name       last_name

01             John             Doe

02             Jane             Doe



hardware table

hardware_id        serial        model        type             user_id

01                  cac21        Dell         Desktop          01

02                  cac22        HP           Laptop           01

03                  cac24        Apple        Laptop           02
硬件表

hardware_id ---- primary key

serial

model

type

user_id ---- foreign key (link to the user table)
范例

用户表

user_id  ------ primary key

first_name

last_name
user_id      first_name       last_name

01             John             Doe

02             Jane             Doe



hardware table

hardware_id        serial        model        type             user_id

01                  cac21        Dell         Desktop          01

02                  cac22        HP           Laptop           01

03                  cac24        Apple        Laptop           02
任何帮助都会很好

谢谢 GG

试试这个

SELECT users.firstname,
    users.lastname,
    hardware.serial       
    hardware.model        
    hardware.type FROM users LEFT JOIN hardware ON users.user_id=hardware.user_id

从数据库中查询数据将在每个记录上重复该人员的姓名,但在生成页面期间,由您决定是否让输出仅显示一次姓名,然后显示该人员的所有硬件,然后转到下一个人及其所有硬件

因此,使用php,您将有一个嵌套循环。外部循环用于跟踪每个新人,内部循环用于仅显示此人的记录。保留该人的“ID”,以防止有一个以上的“John Doe”人实际上是不同的人。身份证将确保合适的单身人士

现在是查询。联接显示表之间的关系,所有引用多个表的查询都应始终使用tableAlias.columnName进行,以防止出现任何歧义。表名别名也是缩短查询可读性的好方法

select
      u.user_id,
      u.first_name,
      u.last_name,
      h.hardware_id,
      h.serial,
      h.model,
      h.type
   from
      user u   <-- the "u" is the alias to user table...
         JOIN hardware h    <-- "h" is the alias for hardware table
            on u.user_id = h.user_id
   order by
      u.first_name,
      u.last_name,
      u.user_id

请确保关闭任何基于html的表/行/详细信息标记

那么查询在哪里?您到底想获取什么数据?我已经研究了连接,但我认为它会多次显示用户信息。假设有人在找约翰。我希望它显示他的用户信息,这很好,但我始终希望它显示与john相关的所有硬件以及GROUP BY…以下连接将只提供两个表中存在的记录:
从用户作为u内部连接硬件作为h ON u.user\u id=h.user\u id
。如果这不是您想要的连接,这说明了连接的作用。我对sql非常陌生。。select语句用于获取用户数据还是仅获取用户的硬件数据