【发布时间】: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 个记录来完成此操作。它为所有记录提供同等优先级,但不确定如何通过另一列“优先级”获得此优先级概念。我无法从我的想法中得到任何信息,所以我在这里寻求帮助。我没有问完整的查询。我问逻辑是否有人可以帮助我从那个角度开始思考以实现某些目标。无论如何感谢您的宝贵时间。
-
因此,使用一些示例数据和您尝试过的查询来编辑您的问题。这将向我们表明您确实付出了一些努力。
-
我已经添加了我现在使用的代码的问题。希望这可能有助于信任我在做一些努力后提出的问题..
-
提供表架构、示例数据和期望的结果来帮助自己获得帮助的最佳方式。