【问题标题】:Logic for prioritizing records based on a field基于字段优先记录的逻辑
【发布时间】:2015-01-12 03:12:31
【问题描述】:

我有一个表格,其中的消息列表将随机显示在前端。消息表最近添加了一个名为“优先级”的字段,其中我存储了 3 个值“低”、“中”、“高”。基于这个优先级,记录的显示数量发生在前端。它在前端显示的次数也存储在字段名称“显示”下的同一个表中。在 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>';
            }
        }

它优先考虑所有可用的消息,并在前端平等地显示。现在我已将数据库更改为多了一个名为“priority”的字段。

 The new table format:
 ID    MESSAGEHEAD        MESSAGEDESC             DISPLAYED    PRIORITY
 1     message title 1    message description 1   15           HIGH
 2     message title 2    message description 2   17           LOW
 3     message title 3    message description 3   16           MEDIUM
 and so on....

根据优先级,消息应在前端提供。因此查询必须根据“优先级”和“显示”字段执行获取记录的逻辑。

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

  MESSAGE        PRIORITY    DISPLAYED
  MESSAGE1     - HIGH      - 45 TIMES
  MESSAGE2     - HIGH      - 45 TIMES
  MESSAGE3     - LOW       - 15 TIMES
  MESSAGE4     - MEDIUM    - 30 TIMES

您在上面看到的优先级决定了消息显示的次数。真的很抱歉,我无法清楚地了解如何实现这一目标。如果有人有逻辑请解释。如果您可以提示我需要继续进行的方式,我可以尝试解决它。非常感谢提前。

【问题讨论】:

  • 是的,根据您的说法,这是可能的,但如果您不付出一些努力,这里没有人会帮助您。
  • 感谢您的评论和反对。我通过根据显示的次数列进行排序(asc)并选择要显示的前 3 个记录来完成此操作。它为所有记录提供同等优先级,但不确定如何通过另一列“优先级”获得此优先级概念。我无法从我的想法中得到任何信息,所以我在这里寻求帮助。我没有问完整的查询。我问逻辑是否有人可以帮助我从那个角度开始思考以实现某些目标。无论如何感谢您的宝贵时间。
  • 因此,使用一些示例数据和您尝试过的查询来编辑您的问题。这将向我们表明您确实付出了一些努力。
  • 我已经添加了我现在使用的代码的问题。希望这可能有助于信任我在做一些努力后提出的问题..
  • 提供表架构、示例数据和期望的结果来帮助自己获得帮助的最佳方式。

标签: php mysql sql logic


【解决方案1】:

可能是这样的

select * from c_messages order by priority, displayed desc;

如果您以递增的优先级顺序声明枚举,则在优先级之后添加desc

【讨论】:

  • 感谢您帮助我。它并没有像往常一样考虑优先字段,并且只显示该字段。
  • 我的意思是有很多优先级为“HIGH”的消息,它们只显示在前面......并且显示的计数在这之间得到管理......我的意思是显示的高优先级消息计数是多次处决后变得平等。低优先级和中优先级的东西根本没有出现在屏幕上。
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
相关资源
最近更新 更多