这是我的代码:
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>");
}
}