仅当字段存在时,MySQL ORDER BY字段

时间:2014-11-16 11:16:57

标签: php mysql

在MySQL中,如果该字段作为表中的列存在,我希望按字段排序。如果该字段不存在,我希望查询忽略该查询段。如果我尝试像

那样的话
SELECT
    post.*
FROM post AS post
WHERE post.postid IN (9818,9814,9815)
ORDER BY IFNULL(post.vote_count,0) > 5 DESC;

在我的查询结束时收到错误:

#1054 - Unknown column 'post.vote_count' in 'order clause'

post的表结构有postid,threadid和title字段。我该怎么写这个查询?

(我已经看过Ordering by a field, only if it exists。这个答案对我不起作用,因为我无法添加查询的前一部分," IFNULL(post.vote_count) ,0)作为newvotecount"。)

2 个答案:

答案 0 :(得分:-2)

如果表中不存在字段(或查询中的别名),则不能在查询中使用字段

答案 1 :(得分:-2)

在Oracle中,您可以使用以下

来完成此操作
    SELECT * FROM table_name
    ORDER BY CASE WHEN EXISTS (select 1
                              FROM ALL_TAB_COLUMNS 
                              WHERE lower(column_name) IN lower('column1_name') AND lower(table_name) = lower('table_name')) THEN column1_name
                   ELSE column2_name
                   END;

使用Mysql系统表替换Oracle System表


对于Mysql:

    SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('columnA','ColumnB')

    AND TABLE_SCHEMA='YourDatabase';

Ref