【问题标题】:MySQL sort order issue in Ajax/PHP dropdown menuAjax/PHP 下拉菜单中的 MySQL 排序顺序问题
【发布时间】:2012-10-28 01:13:41
【问题描述】:

希望有人可以帮助我解决 MySQL/PHP 排序问题。

我正在做的事情的简要概述如下:

我有三个(链接的)选择框。第一个框的输出是“固定的”(它包含我商店中的所有顶级类别)。随后的两个框根据前一个框中的选择填充...标准,简单的东西,我听到你说!

这一切都很好,最后一个框中的选择(字符串)被附加到“搜索结果”页面——正是我需要的。我的问题是在尝试组织第二个和第三个框的排序顺序时出现。

这是我的代码示例:

        public function ShowType()
    {
        $sql = "SELECT categories.*, categories_description.categories_name FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id AND categories.parent_id = $_POST[category] ORDER BY categories_name";
        $res = mysql_query($sql,$this->conn);
        $type = '<option value="0">Select...</option>';
        while($row = mysql_fetch_array($res))
        {
        $type .= '<option value="' . $row['categories_name'] . '">' . $row['categories_id'] . '</option>';
        }
        return $type;
    }

Ajax 替换了(灰色,不可点击)

<option value="0">Select...</option>

部分到

<option value="' . $row['categories_name'] . '">' . $row['categories_id'] . '</option>

一旦做出选择(在前一个框中)。

我的问题是激活框后显示的数组不是按字母顺序排列的。我想按categories_name对选择框中的输出进行排序,但是无论我在MySQL查询中尝试什么,它都不会有!

我的“动态”标签的输出是否因为 Ajax 更新的方式而未排序?我是否需要使用 PHP 重新排序数组,如果需要,有人可以将我指向初学者的水平(我不想称自己为中级!)请教如何去做?

我希望我不会像上次那样引发更多争论! :-)

干杯,

安迪。

【问题讨论】:

  • Please, don't use mysql_* functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.
  • dev.mysql.com/doc/refman/5.0/en/select.html 的哪一部分没有引领您走向成功?您在查询数据库时对值进行排序。
  • 感谢您的链接,Hakre。我将看看如何替换mysql_* 函数。我尝试对 MySQL 查询中的值进行排序(我尝试了许多不同的 SORT BY 值,但似乎没有任何作用!)但我也会从你的第二篇文章中阅读你的链接。
  • 它被称为ORDER BY 而不是SORT BY。检查 mysql_query 返回 FALSE,这是错误的。然后用mysql_error 显示错误。另见stackoverflow.com/a/12770072/367456
  • 对不起,那只是我在回复中使用了错误的术语。在我的代码中,我使用了ORDER BY。但是指出这样的小错别字有助于将来记住事情!如果我从现在开始在代码中输入SORT BY,我会记住这篇文章的! :D

标签: php mysql ajax


【解决方案1】:

在您的 SQL 查询中,您有:

ORDER BY categories_name

但是,在用于填充下拉列表的代码中:

&lt;option value="' . $row['categories_name'] . '"&gt;' . $row['categories_id'] . '&lt;/option&gt;

您正在显示categories_id,但按categories_name 排序,因此用户不会看到结果下拉列表。

【讨论】:

  • 感谢您的评论,MitchS。以前我看过这个,在问我的问题之前我已经交换了你提到的两个值,但它并没有改变下拉列表的结果。您是在暗示 $row['xxxxx_xxxxx'] 条目之一是多余的,还是我应该在其中一个条目中有另一个值?
【解决方案2】:

使用它: ORDER BY categories_id

【讨论】:

  • 谢谢你的建议,Akhilesh,但这没有任何效果...即使有,我希望结果按字母顺序排列,并且 ID 不是字母顺序,它是为了他们被创造!实际上,这是显示项目的顺序,无论我如何尝试在查询中对列表进行排序!我试过ORDER BY categories_idORDER BY categories_nameORDER BY categories_description.categories_name,还有其他一切!填充时下拉菜单的顺序没有任何改变!我想我将不得不更改数据库中的类别 ID。
【解决方案3】:

尝试以下查询: "SELECT categories.*, categories_description.categories_name FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id AND categories.parent_id = '$_POST[category]' ORDER BY categories_name"

"SELECT categories.*, categories_description.categories_name FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id AND categories.parent_id = '".$_POST[category]."' ORDER BY categories_name"

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 2019-12-26
    • 2013-12-04
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多