Цикл по набору результатов и выполнение второго запроса для каждой строки является плохой практикой и вызывает ненужную нагрузку на базу данных.
Похоже, вам нужно 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, ...
Это не только уменьшит нагрузку на базу данных (меньше данных для выбора и передачи по сети), но также поможет устранить двойные имена столбцов, потому что двойные имена столбцов вызывают проблемы при их отображении (как Вы узнали сами).
Вы можете сделать две вещи, чтобы избежать этой проблемы:
если в обеих таблицах есть столбцы с одинаковыми именами и одинаковым содержанием (например, если эти столбцы используются для объединения таблиц), просто выберите одну из них (независимо от того, какая из них, потому что они идентичны).
если в обеих таблицах есть столбцы с одинаковыми именами и разным содержимым, и вам нужны обе из них, самый простой способ - дать одной из них псевдоним:
SELECT t1.id, t2.id AS AnotherId, ...
Это приведет к тому, что второй столбец будет назван «AnotherId», поэтому вы можете получить его с помощью $rs[AnotherId]
.
Честно говоря, я не гуру PHP, поэтому я не знаю, понимает ли PHP и $rs[table.field]
, но есть достаточно технологий доступа к данным, у которых возникают проблемы, когда запрос возвращает два столбца с одинаковыми именами ... поэтому наложение дублирующих столбцов может никогда не ошибайся.