PHP / MySQL, где / порядок не данные заказа - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь упорядочить данные из таблицы 'tech_inquiry' по полю 'number' в порядке убывания. Это должно привести результаты в порядок по годам. Каждое поле «число» соответствует другому полю с заголовком / датой (что на самом деле просматривается посетителями), которое я не могу отсортировать, потому что дата находится в конце заголовка и не всегда в одном и том же месте.

Кроме того, таблица '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> 

    <?

Мне интересно, может ли это быть из-за того, что мы выполняем запрос внутри цикла.

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Здесь есть ряд проблем.Прежде всего вам нужен только один запрос, чтобы выполнить это.Пожалуйста, ознакомьтесь с написанием 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>";
}
?>
1 голос
/ 12 марта 2012

Вы не зацикливаете внутренний запрос. В любом случае, вы должны использовать один запрос для этого:

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
...