2012-03-12 14 views
0

'tech_inquiry'テーブルから 'number'フィールドのデータを降順で注文しようとしています。これは、年々順番に結果を出すべきです。それぞれの「番号」フィールドは、タイトル/日付(実際に訪問者が見たもの)を持つ別のフィールドに対応しています。日付はタイトルの末尾にあり、いつも同じ場所にあるわけではないため、並べ替えることはできません。PHP/MySQLは/ order節のデータを注文していません

はまた、表には「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> 
        <? 
      } 
    ?> 

、私は別の「管理」セクションを持っていますデータを正しく注文することができます。唯一の違いは、ユーザー認証が不要なため(テーブルにデータを追加するために使用されるため)条件付きの '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> 

    <? 

我々がループ内でクエリを実行しているという事実であるかもしれない場合、私は疑問に思って。

答えて

1

ここにはいくつかの問題があります。まず、これを達成するために必要なクエリーは1つだけです。あなたは瞬間が来たらSQLの質問文を読んでください。あなたはそれが非常に役立つことがわかります。

第2に、必要以上に多くのコードを使用しています。以下は、はるかに単純化され、よりクリーンで、おそらく高速のコードです。

<?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>"; 
} 
?> 
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 
関連する問題