"按"排序在mysql查询中,以后在php中回显时不起作用?

时间:2016-01-08 20:50:30

标签: php mysql

这是我的代码:

while ($shop = mysql_fetch_array($shop_result)) {
    $item_result = mysql_query("SELECT * FROM db_".$shop['ItemCategory']."s WHERE ItemId = '".$shop['ItemId']."' ORDER BY Level");
    $item = mysql_fetch_assoc($item_result);


echo("<item>");
        echo("<Element>" . $item['ItemElement'] . "</Element>");
        echo("<ItemLevel>" . $item['Level'] . "</ItemLevel>");
echo("</item>");

以下是典型输出:

</items>
<item>
<Element>8</Element>
<Level>15</Level>
</item>
<item>
<Element>4</Element>
<Level>2</Level>
</item>
<item>
<Element>4</Element>
<Level>24</Level>
</item>
<item>
<Element>4</Element>
<Level>17</Level>
</item>
<items>

但第三高Level位于顶部?为什么?我按ItemLevel订购了?这是我想要的输出:

</items>
<item>
<Element>4</Element>
<Level>2</Level>
<item>
<Element>8</Element>
<Level>15</Level>
</item>
<item>
<Element>4</Element>
<Level>17</Level>
</item>
<item>
<Element>4</Element>
<Level>24</Level>
</item>
<items> 

我真的无法弄明白。当我在Sequel Pro中运行相同的东西时,我得到了我想要的东西,但它是GUI。

2 个答案:

答案 0 :(得分:1)

Level似乎是一个字符串。所以,它是作为字符串而不是数字排序。

以下是两个修正案首先,订购数字:

order by Level + 0

其次,先按长度排序:

order by length(Level), Level

答案 1 :(得分:1)

您没有从$item_result获取所有行,而只是获取第一行。您需要另一个while循环。

while ($shop = mysql_fetch_array($shop_result)) {
    $item_result = mysql_query("SELECT * FROM db_".$shop['ItemCategory']."s WHERE ItemId = '".$shop['ItemId']."' ORDER BY Level");
    while ($item = mysql_fetch_assoc($item_result)) {    
        echo("<item>");
                echo("<Element>" . $item['ItemElement'] . "</Element>");
                echo("<ItemLevel>" . $item['Level'] . "</ItemLevel>");
        echo("</item>");
    }
}