php сортировка записей sql - PullRequest
       18

php сортировка записей sql

1 голос
/ 09 сентября 2011

Я перебираю записи в таблице, и в каждом цикле она открывает другую таблицу, чтобы извлечь из нее данные. Мне нужно ЗАКАЗАТЬ основной цикл ($ rs) по полю из 2-й таблицы.

Я немного новичок в php и sql, так что будьте спокойны: P

пример кода:

$sql_result = mysql_query("SELECT * FROM table1", $db); // i want this to ORDER BY data from table2
while($rs = mysql_fetch_array($sql_result)) { 
    $sql_result2 = mysql_query("SELECT * FROM table2 WHERE id='$rs[data]'", $db); 
    $rs2 = mysql_fetch_array($sql_result2);

    //get data from table 2

1 Ответ

1 голос
/ 09 сентября 2011

Цикл по набору результатов и выполнение второго запроса для каждой строки является плохой практикой и вызывает ненужную нагрузку на базу данных.
Похоже, вам нужно INNER JOIN:

    SELECT t1.*
      FROM table1 t1
INNER JOIN table2 t2 ON t2.id = t1.data
  ORDER BY t2.field

Таким образом, вы можете получить все данные с помощью одного одного запроса.


EDIT:
Обычно вам следует избегать возврата всех столбцов (SELECT *) и выбирать только те столбцы, которые вам действительно нужны:

SELECT t1.id, t2.field1, t1.field2, ...

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

Вы можете сделать две вещи, чтобы избежать этой проблемы:

  1. если в обеих таблицах есть столбцы с одинаковыми именами и одинаковым содержанием (например, если эти столбцы используются для объединения таблиц), просто выберите одну из них (независимо от того, какая из них, потому что они идентичны).

  2. если в обеих таблицах есть столбцы с одинаковыми именами и разным содержимым, и вам нужны обе из них, самый простой способ - дать одной из них псевдоним:

    SELECT t1.id, t2.id AS AnotherId, ...
    

    Это приведет к тому, что второй столбец будет назван «AnotherId», поэтому вы можете получить его с помощью $rs[AnotherId].
    Честно говоря, я не гуру PHP, поэтому я не знаю, понимает ли PHP и $rs[table.field], но есть достаточно технологий доступа к данным, у которых возникают проблемы, когда запрос возвращает два столбца с одинаковыми именами ... поэтому наложение дублирующих столбцов может никогда не ошибайся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...