php - 不重复地从MySQL表中选择

标签 php mysql sql select

我的 MySQL 数据库中有三个表:学校、家长和学生。 students 有两列 school_id 和 parent_id,它们将 students 中的每一行链接到 parents 中的一行和 schools 中的一行。这种结构是这样的,一位家长可能在多所学校有 child ,但该家长应该只有一个记录。现在我想从 parent 那里选择行,这样无论学生中有多少行指向那个 parent ,都只会拉出一行。目前我的查询看起来像:

$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 ) );

我什至用 LEFT OUTER JOIN 替换了 INNER JOIN。没有变化。

这个查询从 parents 中为 students 中的每一行提取一行。有什么帮助吗?

谢谢。

最佳答案

简单地在查询中使用 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 ) );

关于php - 不重复地从MySQL表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085937/

相关文章:

Mysql查询调优(大数据集)及解释计划

mysql - prefetch_related 上的 Django ORM 注释

mysql - SQL 选择仅包含特殊字符的值

sql - 如何在此 SQL Pivot 查询中插入 TOTAL 列?

php - 获取 Laravel 中的所有 ENV 变量

PHP,可以吗?将 password_hash 中的字符串作为主键存储在数据库中?

php - 使用 canvas.todataurl() 限制 jQuery 帖子大小

php - 为 Woocommerce 中的登录用户隐藏 "Add to Cart"按钮

mysql - 从多个表的单个列中检索数据以充当另一个表的列

mysql - 如何在表上添加 ON DELETE 约束?