PHP/MySQLwhere/order子句未对数据进行排序


PHP/MySQL where/order clause not ordering data

我正试图按字段"number"降序排列表"tech_inquiry"中的数据。这应该使结果按年份排序。每个"数字"字段都对应于另一个带有标题/日期(访问者实际查看的内容)的字段,我无法按其排序,因为日期位于标题的末尾,并不总是在同一位置。

此外,表"techn_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> 
                    <?   
            }
    ?>

此外,我还有另一个"管理"部分,可以正确地排序数据。唯一的区别是没有条件"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> 
    <?

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

这里有很多问题。首先,您只需要一个查询就可以实现这一点。请稍后阅读有关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>";
}
?>

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

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