Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于字段对记录进行优先级排序的逻辑_Php_Mysql_Sql_Logic - Fatal编程技术网

Php 基于字段对记录进行优先级排序的逻辑

Php 基于字段对记录进行优先级排序的逻辑,php,mysql,sql,logic,Php,Mysql,Sql,Logic,我有一个表格,其中的邮件列表将在前端随机显示。消息表最近添加了一个名为“优先级”的字段,其中我存储了3个值“低”、“中”、“高”。根据此优先级,记录的显示数量将发生在前端。它在前端显示的次数也被存储在同一个表的字段名“displayed”下。在mysql查询中,是否可以根据“优先级”列和“显示次数”列选择要显示的记录?或者这只能在php级别完成 The older table format: ID MESSAGEHEAD MESSAGEDESC D

我有一个表格,其中的邮件列表将在前端随机显示。消息表最近添加了一个名为“优先级”的字段,其中我存储了3个值“低”、“中”、“高”。根据此优先级,记录的显示数量将发生在前端。它在前端显示的次数也被存储在同一个表的字段名“displayed”下。在mysql查询中,是否可以根据“优先级”列和“显示次数”列选择要显示的记录?或者这只能在php级别完成

 The older table format:
 ID    MESSAGEHEAD        MESSAGEDESC             DISPLAYED
 1     message title 1    message description 1   15
 2     message title 2    message description 2   17
 3     message title 3    message description 3   16
 and so on....
因此,我编写了以下代码来获取要在前端显示的消息

        // Logic of getting message based on the configuration.
        $messages_query = @mysql_query('select * from c_messages order by displayed asc limit 3');
        if(@mysql_num_rows($messages_query)){
            $total_messages = @mysql_num_rows($messages_query);
            while($message = @mysql_fetch_array($messages_query)){
                $messages_xml .= '<message><messagehead>'.$message['messagehead'].'</messagehead><mesagedesc>'.$message['mesagedesc'].'</mesagedesc></message>';
            }
        }
根据优先级,消息应该在前端得到服务。因此,查询必须根据“优先级”和“显示”字段执行获取记录的逻辑

我的意思是显示时间应该如下

  MESSAGE        PRIORITY    DISPLAYED
  MESSAGE1     - HIGH      - 45 TIMES
  MESSAGE2     - HIGH      - 45 TIMES
  MESSAGE3     - LOW       - 15 TIMES
  MESSAGE4     - MEDIUM    - 30 TIMES
如上所述,优先级决定了消息显示的次数。我真的很抱歉,我无法弄清楚如何实现这一目标。如果有人有逻辑,请解释一下。如果你能给我一个提示,告诉我该怎么做,我可以试着解决它。非常感谢

可能是这样

select * from c_messages order by priority, displayed desc;

或者,如果按优先级递增的顺序声明枚举,则在优先级后添加
desc

是的,根据你所说的,这是可能的,尽管如果你不表现出一些努力,没有人会在这里帮助你。谢谢你的评论和否决票。我根据显示次数列进行排序(asc),并选择前3条记录进行显示。它对所有记录给予同等的优先级,但不确定如何使用另一列“优先级”来获得此优先级概念。我无法从我的想法中得到任何帮助,所以我在这里寻求帮助。我没有问完整的问题。我问逻辑学,如果有人能帮我,我可以从那个角度开始思考,从而取得一些成就。无论如何,感谢您宝贵的时间。因此,请用一些示例数据和您尝试的查询编辑您的问题。这将向我们展示您确实做了一些努力。我已经添加了我现在使用的代码。希望这可能有助于信任我在做了一些努力之后提出的问题..你能做的最好的帮助就是提供表模式、示例数据和期望的结果。谢谢你的帮助。它并没有像往常一样工作,它考虑优先级字段,只显示字段。我的意思是有许多优先级为“高”的消息只显示在前面。。。显示的计数在这两者之间进行管理。。。我的意思是,在多次执行后,显示的高优先级消息计数变得相等。低优先级和中优先级的东西根本没有出现在屏幕上。
select * from c_messages order by priority, displayed desc;