我的MySQL数据库中有三个表:学校,家长和学生。学生有两列school_id和parent_id,它们将学生的每一行连接到父母的一行和学校的一行。结构是这样的,父母可能在一些学校有孩子,但该父母应该只有一个记录。现在我想从父母中选择行,这样无论学生中有多少行指向该父级,只会拉出一行。目前我的查询如下:
$stmt = $db->prepare( "SELECT p.*
FROM parents p
INNER JOIN studnts S ON p.id = s.parent_id
WHERE s.school_id = :schoolID" );
$stmt->execute( array( ':schoolID'=> $schoolID ) );
我甚至用INNER JOIN
替换了LEFT OUTER JOIN
。没有变化。
此查询从学生的每一行的父母那里抽出一行。有帮助吗?
感谢。
答案 0 :(得分:2)
只需在查询中使用distinct就可以了解
$stmt = $db->prepare( "SELECT distinct p.*
FROM parents p
INNER JOIN studnts S ON p.id = s.parent_id
WHERE s.school_id = :schoolID" );
$stmt->execute( array( ':schoolID'=> $schoolID ) );
答案 1 :(得分:1)
SELECT
p.*
FROM
parents p INNER JOIN studnts S ON p.id = s.parent_id
WHERE
s.school_id = :schoolID
GROUP BY
p.parent_id
or
SELECT
DISTINCt p.parent_id, p.parent_name, p.parent_address ....etc
FROM
parents p INNER JOIN studnts S ON p.id = s.parent_id
WHERE
s.school_id = :schoolID
了解有关GROUP BY的更多信息
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html
了解有关DISTINCT的更多信息
http://dev.mysql.com/doc/refman/5.7/en/distinct-optimization.html
如果您想要两个学生的姓名,以及父母 使用GROUP_CONCAT
了解有关GROUP_CONCAT的更多信息
https://www.percona.com/blog/2013/10/22/the-power-of-mysqls-group_concat/