MySQL – PHP由Inner Joining表id而不是Selected表ID排序?

我有以下查询,我想按UserView ID降序排序,看起来像是非常基本的问题,但我无法弄清楚如何做到这一点,我想继续选择用户.*现在,但订单由UsersView表主键desc,有什么想法吗?

 $phql = " SELECT *
                      FROM User
                      WHERE user_id IN
                      ( SELECT user_to
                        FROM UsersView
                        WHERE user_from=:user_to: )
                      AND gender!=:gender:
                      AND user_id NOT IN (".implode(",",$this->user->getBlocked()).")
                      ORDER BY last_visit DESC
                 /* order by should be usersview.id DESC */ 
                      "; 

运气好吗?

解决方法:

根据您的数据模型,您可以对UsersView进行额外的连接,以便您可以在ORDER BY子句中使用它的id列.

 $phql = " SELECT *
                  FROM User
        JOIN UsersView on User.user_id = UsersView.user_to
                  WHERE user_id IN
                  ( SELECT user_to
                    FROM UsersView
                    WHERE user_from=:user_to: )
                  AND gender!=:gender:
                  AND user_id NOT IN (".implode(",",$this->user->getBlocked()).")
                  ORDER BY UsersView.id DESC"; 

您也可以避免使用嵌套选择来执行过滤,并使用联接表来执行过滤:

 $phql = " SELECT *
                  FROM User
        JOIN UsersView on User.user_id = UsersView.user_to
                  WHERE user_from=:user_to:
                  AND gender!=:gender:
                  AND user_id NOT IN (".implode(",",$this->user->getBlocked()).")
                  ORDER BY UsersView.id DESC"; 

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...