从MySQL表中选择而不重复

时间:2015-12-04 10:16:33

标签: php mysql sql select

我的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。没有变化。

此查询从学生的每一行的父母那里抽出一行。有帮助吗?

感谢。

2 个答案:

答案 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/