MySQL order by 在从两个表中选择时被忽略

标签 mysql sql-order-by

我有两个表:学生和家长,处于单亲对多学生的关系。两者都有一个parentID。 parent 表用作我的登录名。它有家长 ID、姓名、电子邮件地址和密码。学生有很多领域。我需要选择所有家长并包括他们学生的姓名(这部分工作正常)。我希望能够通过家长姓名或家长电子邮件进行订购。但是,我的 order by 语句被忽略,$rows 是按parentID 排序的。这是我的代码:

$query = 'SELECT 
  Parents.parentID, 
  Parents.parentName, 
  Parents.Email, 
  Students.nickName,
  Students.Lname
FROM Parents, Students
WHERE Parents.parentID=Students.parentID
  AND Parents.status=:active
ORDER BY :orderby ASC' ;
$stmt = $db->prepare($query);
$stmt->bindValue(':orderby', $myOrderby, PDO::PARAM_STR);
$stmt->bindValue(':active', 'active', PDO::PARAM_STR);

我已经尝试过

$myOrderby = 'parentName' ;
$myOrderby = 'Parents.parentName' ;
$myOrderby = 'Email' ;
$myOrderby = 'Parents.Email' ;

(是的,在查询上方)无论如何,结果都是相同的:它按照parentID的顺序返回数据。我已经搜索了一个多小时寻找解决方案,但一无所获。感谢您提供的任何帮助。

最佳答案

你可以尝试这样的事情:

SELECT 
  Parents.parentID, 
  Parents.parentName, 
  Parents.Email, 
  Students.nickName,
  Students.Lname
FROM Parents, Students
WHERE Parents.parentID=Students.parentID
  AND Parents.status=:active
ORDER BY
    CASE :orderby
       WHEN 'Name' THEN Parents.parentName
       WHEN 'EMail' THEN Parents.Email
    END ASC

然后将 $myOrderby 设置为 'Name''EMail'

您可以将其扩展到更多列,前提是所有列都具有相同的数据类型。如果您想要混合字符串和数字数据来进行排序,则可以这样做:

ORDER BY
    CASE :orderby
       WHEN 'Name' THEN Parents.parentName
       WHEN 'EMail' THEN Parents.Email
    END ASC,
    CASE :orderby
       WHEN 'NumericColumn' THEN NumericColumn
    END

因为每个 CASE 表达式的结果必须是单一类型或可转换为单一类型 - 并且您不希望强制将数值作为字符串进行比较 - 将 10 放在 1 之间和2。

关于MySQL order by 在从两个表中选择时被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17538997/

相关文章:

仅在运行脚本文件时未找到 Python 3.4 MySQL 连接器

mysql - SQL选择查询不显示MYSQL中where的结果

postgresql - array_agg DISTINCT 和 ORDER

mysql - Order by multiple OR Mysql

mysql - 从正则表达式中得到错误 'invalid repetition count(s)'

php - HTML 表单数据 > PHP > MySQL UTF 编码(西里尔字母)

mysql - 删除数据库,然后创建数据库会导致 SQL 语法错误

sql - 自定义排序顺序 - 如何不重复 Case 语句

MySQL Order By a number,最后一个空字符串(0's)

android - 使用 SimpleCursorAdapter 和 SQLite 在 ListView 中反转顺序