【问题标题】:PHP select dropdown options putting specific options at top via mysqlPHP 选择下拉选项,通过 mysql 将特定选项放在顶部
【发布时间】:2012-11-23 06:05:19
【问题描述】:

我的国家/地区表有这些列:rank_id 和 country_name。

目前它是按名称排序,但我试图将一些特定国家/地区按其排名顺序放在列表顶部,然后其余的按名称排序。

这是我的查询:

foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row)
$countries[] = $row;

有什么想法吗?

【问题讨论】:

  • rand_id是“排名顺序”,还是主键?
  • 我认为他的意思是“排名顺序”是rand_id 列。我的看法是你应该有一个名为rank_order 的第三列并按此排序,然后按名称排序。

标签: php mysql sql-order-by selection


【解决方案1】:

如果您添加一个默认为0rank_order 列,然后将其更改为您希望在列表顶部的几个特定国家/地区的更高数字。

然后您可以使用此查询来获取您的数据:

SELECT * FROM table_countries ORDER BY rank_order DESC, country_name

要按等级排序的行总是排在第一位(按降序排列),因为它们的rank_order 高于0。其余的将按country_name 的字母顺序排列。

【讨论】:

    【解决方案2】:

    您可以通过添加以下内容来调整“ORDER BY”子句:

    ORDER BY country_name='USA' DESC, country_name='Canada' DESC, country_name ASC
    

    由于 "country_name='USA'" 仅对 USA 返回 "true"(或 1),而对所有其他国家/地区返回 "false"(或 0),并且顺序为降序,因此 USA 将是第一个,然后是相同的加拿大,然后所有其他人都会来!

    【讨论】:

      【解决方案3】:

      实现此目的的一种简单方法是在country_name 中包含一个数字display_order 列,它允许您通过使用名称进行排序来覆盖优先级设置。

      这将允许您根据需要任意将国家/地区移至列表顶部,而无需在以后更改查询。

      然后您可以执行以下操作:

        SELECT *
        FROM country_name
        ORDER BY display_order ASC, name ASC;
      

      【讨论】:

        猜你喜欢
        • 2019-05-28
        • 1970-01-01
        • 2020-10-02
        • 2013-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多