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