";按“;在mysql中查询dos';以后在php中回显时不起作用


"Ordering by" in mysql query doesn't work when echoing in php later?

这是我的代码:

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。

Level看起来是一个字符串。所以,它是作为字符串而不是数字排序的。

这里有两个修复首先,按数字排序:

order by Level + 0

第二,按长度排序优先:

order by length(Level), Level

您不是从$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>");
    }
}