gpt4 book ai didi

php - 如何查询一对多实体?

转载 作者:行者123 更新时间:2023-11-29 19:12:03 25 4
gpt4 key购买 nike

在我的系统(PHP/MySql)中,我有一个用户表和图像表。一个用户可以拥有多张图像。

我有一个页面,需要列出每个用户的所有用户(即使用户没有图像)和所有图像。我怎样才能得到这个?

解决方案1

 $users = query('SELECT * FROM Users')

then

 foreach($users as $user)  
$user->images = query('SELECT id, path, size FROM Images WHERE user_id = ' . $user->id)

解决方案2

$users = query('SELECT *, (SELECT GROUP_CONCAT(id,path,size) FROM Images) as images FROM Users')

then

 foreach($users as $user)

list($id,$path, $size) = explode(',', $user->images)
$user['images'] = ['id' => $id, 'path' => $path, 'size' => $size];

有更好的方法来完成这个任务吗?

附注1:使用 LEFT JOIN 重复结果。

附注2:使用 INNER JOIN/JOIN ,没有图像的用户将被忽略。

最佳答案

这里是 2 个表、学生和付款的所有可能性查询。

Tables:   students                payment
id_student name id id_student datepayment
1 Lisa 1 1 2017-01-01
2 2 1 2017-02-03
3 Asher 3 2 2017-03-05
4 Lee 4 1 2017-03-03

此查询:

select students.name, payment.datepayment
FROM students, payment
where students.id_student = payment.id_student;

将给出此结果 - 所有在付款表中具有 id_student 的学生姓名

name    datepayment
Lisa 2017-01-01
Lisa 2017-02-03
Lisa 2017-03-03
2017-03-05

此查询:

SELECT s.name, p.datepayment
FROM
students s
LEFT OUTER JOIN payment p ON s.id_student = p.id_student;

将给出以下结果:左表(学生)中所有在付款表中包含或不包含 id_student 的学生姓名

name    datepayment
Lisa 2017-01-01
Lisa 2017-02-03
2017-03-05
Lisa 2017-03-03
Asher NULL
Lee NULL

此查询:

SELECT s.name, p.datepayment
FROM
students s
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student;

将给出此结果 - 全部来自右侧表付款,并且只有表付款中具有 id_student 的学生姓名

name    datepayment
Lisa 2017-01-01
Lisa 2017-02-03
2017-03-05
Lisa 2017-03-03

此查询:

SELECT s.name, p.datepayment
FROM
students s
INNER JOIN payment p ON s.id_student = p.id_student;

将给出此结果 - 所有在付款表中具有 id_student 的学生姓名

name    datepayment
Lisa 2017-01-01
Lisa 2017-02-03
Lisa 2017-03-03

关于php - 如何查询一对多实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com