Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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/8/mysql/67.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
Php 如何查询一对多实体?_Php_Mysql - Fatal编程技术网

Php 如何查询一对多实体?

Php 如何查询一对多实体?,php,mysql,Php,Mysql,在我的系统PHP/MySql中,我有一个用户表和图像表。 一个用户可以有多个图像 我有一个页面,其中需要列出所有的Userseven,如果用户没有图像和所有的图像,为每个用户。 我怎么能得到这个 解决方案1 然后 解决方案2 $users=query'SELECT*,从图像中选择组\u CONCATid、路径、大小作为用户的图像 然后 有更好的方法来完成这个吗 第1点:使用左连接复制结果 第2点:使用内部联接/联接,没有图像的用户将被忽略。这里的示例记住,内部联接是两个表的交集 SELECT U

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

我有一个页面,其中需要列出所有的Userseven,如果用户没有图像和所有的图像,为每个用户。 我怎么能得到这个

解决方案1

然后

解决方案2

$users=query'SELECT*,从图像中选择组\u CONCATid、路径、大小作为用户的图像

然后

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

第1点:使用左连接复制结果


第2点:使用内部联接/联接,没有图像的用户将被忽略。

这里的示例记住,内部联接是两个表的交集

SELECT
Users.id as user_id,
Images.id as image_id,
Images.path,
Images.size
FROM
Users
INNER JOIN Images ON Users.id = Images.user_id
如果要使用内部联接,但请记住,对于大数据和多数据,联接速度较慢,不建议使用。了解如何在需要时获取数据,我建议定义REST端点,并在web客户端需要时发出ajax请求和获取数据。 如果您不想错过任何用户,也不想重复,请参阅以下链接。 更新: 我看到了你的最新帖子。这对你有帮助。 更确切地说,答案在这里


这里是关于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;
SELECT s.name, p.datepayment
FROM
students s
LEFT OUTER JOIN payment p ON s.id_student = p.id_student;
SELECT s.name, p.datepayment
FROM
students s
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student;
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
        2017-03-05
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
Asher       NULL
Lee         NULL
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
Lisa    2017-03-03
此查询:

select students.name, payment.datepayment
FROM students, payment
where students.id_student = payment.id_student;
SELECT s.name, p.datepayment
FROM
students s
LEFT OUTER JOIN payment p ON s.id_student = p.id_student;
SELECT s.name, p.datepayment
FROM
students s
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student;
SELECT s.name, p.datepayment
FROM
students s
INNER JOIN payment p ON s.id_student = p.id_student;
将给出以下结果:左表中所有学生的姓名,在付款表中有或没有id\U学生

name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
Lisa    2017-03-03
        2017-03-05
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
Asher       NULL
Lee         NULL
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
Lisa    2017-03-03
此查询:

select students.name, payment.datepayment
FROM students, payment
where students.id_student = payment.id_student;
SELECT s.name, p.datepayment
FROM
students s
LEFT OUTER JOIN payment p ON s.id_student = p.id_student;
SELECT s.name, p.datepayment
FROM
students s
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student;
SELECT s.name, p.datepayment
FROM
students s
INNER JOIN payment p ON s.id_student = p.id_student;
将给出此结果-全部来自正确的付款表,并且付款表中只有id为的学生姓名

name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
Lisa    2017-03-03
        2017-03-05
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
Asher       NULL
Lee         NULL
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
Lisa    2017-03-03
此查询:

select students.name, payment.datepayment
FROM students, payment
where students.id_student = payment.id_student;
SELECT s.name, p.datepayment
FROM
students s
LEFT OUTER JOIN payment p ON s.id_student = p.id_student;
SELECT s.name, p.datepayment
FROM
students s
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student;
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
        2017-03-05
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
Asher       NULL
Lee         NULL
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
        2017-03-05
Lisa    2017-03-03
name    datepayment
Lisa    2017-01-01
Lisa    2017-02-03
Lisa    2017-03-03

使用内部连接,为什么不使用?因为它会忽略没有图像的用户。对吗?内部连接将忽略在图像表中没有记录的用户,对吗???请参阅更新的帖子,以及与此相关的链接我得到了很好的结果,但是我必须从用户中选择*然后混合结果?您不必混合结果,您可以从用户中选择其他或所有列,我将编辑postRight。因此,要查询有关用户的信息,我需要查询Images表。凉的但如果用户有另一个一对多?喜欢团体吗?我将查询Images表或Groups表?选择User.*Images.id作为Images\u id,path,size使用此选项进行选择,在这种情况下,用户处于这两个表之间以及类似的多对多关系中,Images和grup用户具有多对多关系感谢链接!但是在链接中使用查询只会生成一个图像,我认为这是第一个找到的图像。您可以通过将所有图像的id包含到一个字段并在此处左键联接来找到解决方案