PHP / MySQL其中/ order子句没有排序数据

时间:2012-03-12 18:41:54

标签: php mysql where

我正在尝试按字段'number'从表'tech_inquiry'中按降序排序数据。这应该按年顺序排列结果。每个“数字”字段对应于另一个具有标题/日期(访问者实际查看的内容)的字段,我无法对其进行排序,因为日期位于标题的末尾,而不是始终位于同一位置。

此外,表'tech_inquiry_allowed'确定登录时谁可以查看。

话虽如此,这是代码:

<?
        $query2=mysql_query("SELECT * FROM tech_inquiry_allowed where term_code = '$term_code' ");
        while($row2=mysql_fetch_assoc($query2))
            {
                $id2=$row2['id'];
                $query3=mysql_query("SELECT * FROM tech_inquiry WHERE id= '$id2' ORDER BY number DESC");
                $row3=mysql_fetch_assoc($query3);
                $name3=$row3['name'];
                    ?> 
                        <hr />
                        <li><a href="get_file.php?id=<? echo $id2; ?> "><? echo $name3; ?> </a> </li> 
                    <?   
            }
    ?>

另外,我还有另一个'admin'部分,可以正确地订购数据。唯一的区别是没有条件'where'子句,因为不需要用户身份验证(它用于向表中添加数据)。

以下是代码:

<? 
$query2= mysql_query("SELECT * from tech_inquiry ORDER BY number DESC");
while($row2=mysql_fetch_assoc($query2))
{
    $id2=$row2['id'];
    $name2=$row2['name'];
    ?> 
    <hr />
    <li><a href="get_file.php?id=<? echo $id2; ?> "><? echo $name2; ?> </a> </li> 

    <?

我想知道是否可能是我们在循环中运行查询。

2 个答案:

答案 0 :(得分:1)

您没有循环内部查询。无论如何,您应该使用单个查询:

SELECT allowed.*, inquiry.* 
FROM tech_inquiry_allowed allowed 
    INNER JOIN tech_inquiry inquiry 
    ON inquiry.id = allowed.id
WHERE term_code = '$term_code' 
ORDER BY inquiry.number DESC

答案 1 :(得分:1)

这里有很多问题。首先,您只需要一个查询即可完成此任务。请稍等一下,阅读SQL查询。你会发现它非常有帮助。

其次,您使用的代码超出了您的需要。下面是更简化,更清晰,可能更快的代码。

<?php
$query = mysql_query("SELECT * FROM tech_inquiry ti WHERE id IN (SELECT id FROM tech_inquiry_allowed where term_code = '$term_code') ORDER BY ti.number");

while ($row = mysql_fetch_object($query)) {
  echo "<hr />\n<li><a href='get_file.php?id={$row->id}'>{$row->name}</a></li>";
}
?>