Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
Mysql 选择父&x2B;他的孩子+;按nPages排序的儿童书籍_Mysql_Database_Left Join - Fatal编程技术网

Mysql 选择父&x2B;他的孩子+;按nPages排序的儿童书籍

Mysql 选择父&x2B;他的孩子+;按nPages排序的儿童书籍,mysql,database,left-join,Mysql,Database,Left Join,父亲的桌子 id name age married 9 Max 45 1 儿童桌 id father_id name 12 9 Rose 书桌 id owner_id title nPages 1 12 Harry potter 755 2 12 JDK 124 我试过了 Select fa

父亲的桌子

id     name    age    married
9      Max     45     1
儿童桌

id    father_id    name 
12       9         Rose
书桌

id    owner_id   title            nPages
1        12       Harry potter    755
2        12       JDK             124
我试过了

Select father.*, child.*, books.*
FROM fathers father
LEFT JOIN children child
    ON child.father_id = father.id
LEFT JOIN books book
    ON book.owner_id = child.id
WHERE father.married = 1
LIMIT 1
它只返回父和子+一本书。但我需要孩子所有的书都按页数分类

大概是这样的:

[
  name : MAX , 
  age : 45, 
  married : 1, 
  child => [
     father_id => 9, 
     name => Rose, 
     books => [
        book1 => ..., 
        book2 => ...
     ]

  ]
]
你能帮帮我吗


注意!父亲只能有一个孩子

你试过类似的东西吗

SELECT
    father.name AS fatherName,
    child.name AS childName,
    COUNT(books.owner_id) AS bookCount
FROM
    books
    INNER JOIN child ON books.owner_id = child.id
    INNER JOIN father ON child.father_id = father.id
GROUP BY
    books.owner_id
ORDER BY
    bookCount DESC
LIMIT 1
已更新(未选中)

最终更新(未选中)


你试过这样的东西吗

SELECT
    father.name AS fatherName,
    child.name AS childName,
    COUNT(books.owner_id) AS bookCount
FROM
    books
    INNER JOIN child ON books.owner_id = child.id
    INNER JOIN father ON child.father_id = father.id
GROUP BY
    books.owner_id
ORDER BY
    bookCount DESC
LIMIT 1
已更新(未选中)

最终更新(未选中)


我只是不记得MySQL是否允许您在子句中为
添加限制。。。但你让我知道:

SELECT f.*, b.*, c.* FROM books b
JOIN children c ON b.owner_id = c.id
JOIN fathers f ON c.father_id = f.id
WHERE c.id in (
    SELECT owner_id from books
    GROUP BY owner_id
    ORDER BY count(*) DESC
    LIMIT 1
)
ORDER BY b.nPages

这应该适用于任何数量的儿童。

我只是不记得MySQL是否允许您在
子句中为
添加限制。。。但你让我知道:

SELECT f.*, b.*, c.* FROM books b
JOIN children c ON b.owner_id = c.id
JOIN fathers f ON c.father_id = f.id
WHERE c.id in (
    SELECT owner_id from books
    GROUP BY owner_id
    ORDER BY count(*) DESC
    LIMIT 1
)
ORDER BY b.nPages


这应该适用于任意数量的child。

您希望查询返回某种json吗?:)不,但是使用json_encode将结果数组转换为json。您必须将问题分为两部分:首先编写一个查询来计算每个孩子的图书数量,然后将其用作子查询以获得所需的结果。mysql查询不会返回json编码的结果。首先,处理查询。然后找到在应用程序(在您的例子中是PHP)级别表示数据的方法。father.married=1如何帮助实现结果(基于此问题的标题)您希望查询返回某种json吗?:)不,但是使用json_encode将结果数组转换为json。您必须将问题分为两部分:首先编写一个查询来计算每个孩子的图书数量,然后将其用作子查询以获得所需的结果。mysql查询不会返回json编码的结果。首先,处理查询。然后找到在应用程序(PHP,在您的例子中)级别表示数据的方法。father.married=1如何帮助实现结果(基于此问题的标题)这并不能解决问题。他想要的是“书最多的孩子”。您的解决方案只获得拥有最高所有者id的解决方案。对不起,在ORDER子句中意外使用了所有者id(而不是bookCount)。应该是有效的。问题是这只会限制在一行,而且OP需要为孩子的父亲提供所有的书,因为孩子的书最多。你问题的标题有点误导。我会很快更新我的答案。是的,标题有误导性。我很抱歉,但是描述很清楚。这并不能解决问题。他想要的是“书最多的孩子”。您的解决方案只获得拥有最高所有者id的解决方案。对不起,在ORDER子句中意外使用了所有者id(而不是bookCount)。应该是有效的。问题是这只会限制在一行,而且OP需要为孩子的父亲提供所有的书,因为孩子的书最多。你问题的标题有点误导。我会很快更新我的答案。是的,标题有误导性。很抱歉,但是描述很清楚。你检查过这个吗?我的意思是,books表中的id似乎没有任何链接。不,我没有(我没有模式:),但正如您所说,它不是id,而是所有者id。更新了。你的查询比我的好。(除了我不明白计数(*)对于这种情况)没有更好,没有更糟。。。完全不同
Count(*)
将对行进行计数,而
Count(field)
将对具有非空
字段的行进行计数。在这种情况下,拥有一个
计数(owner\u id)
将是一样的,因为没有所有者的书籍是没有意义的。如果有,并且它们恰好是大多数,那么内部select将只返回一个
null
值。如果使用
count(owner\u id)
,则计数中将忽略所有空值,并返回一个非空的
owner\u id
。是否检查了此项?我的意思是,books表中的id似乎没有任何链接。不,我没有(我没有模式:),但正如您所说,它不是id,而是所有者id。更新了。你的查询比我的好。(除了我不明白计数(*)对于这种情况)没有更好,没有更糟。。。完全不同
Count(*)
将对行进行计数,而
Count(field)
将对具有非空
字段的行进行计数。在这种情况下,拥有一个
计数(owner\u id)
将是一样的,因为没有所有者的书籍是没有意义的。如果有,并且它们恰好是大多数,那么内部select将只返回一个
null
值。如果使用
count(owner\u id)
则会从计数中忽略所有空值,并返回非空的
owner\u id