Сложный SQL-запрос... имена возвращаемых переменных
Извините за то, что я уверен, что это элементарный вопрос для большинства из вас, но у меня есть проблема с колонками таблиц из отдельных таблиц, имеющих одинаковые имена друг с другом, и пытается выбрать из обеих таблиц в одном запросе.
Итак, это мой код:
$q_value = $mdb2->quote($_POST['query']);
$field = $_POST['field'];
$sql = "SELECT m.*, l.name FROM memberlist m, mail_lists l
WHERE m.$field=$q_value
AND l.id = m.list
ORDER BY m.id";
$l_list = $mdb2->queryAll($sql, '', 'MDB2_FETCHMODE_ASSOC');
Список участников таблицы имеет следующие столбцы: идентификатор, адрес электронной почты, список, пол, имя
и таблица mail_lists имеет следующие столбцы: id, name
После выполнения запроса я позже перебираю результаты с помощью foreach, например, так:
foreach ($l_list as $l){ //blahblah }
Проблема заключается в том, что столбец "имя" в mail_lists ссылается на имена в списке, а столбец "имя" в memberlist ссылается на имя члена.
Когда я позже получу доступ к $l->name (в пределах foreach), я получу m.name или l.name? Кроме того, как мне получить доступ к другому?
Или мне просто нужно сделать два отдельных запроса?
1 ответ
Почему вы не можете просто использовать:
SELECT m.*, l.name as l_name FROM ...
а затем различать name
а также l_name
?
И это вопрос стиля, поэтому другие могут не согласиться, но я никогда не использую *
в запросах, предпочитая явные спецификации столбцов. Это на самом деле не проблема в вашем случае, если вы не хотите делать:
SELECT m.*, l.* FROM ...
и до сих пор различают два имени. С явными спецификациями столбцов, вы можете добавить as
предложение для каждого столбца, чтобы дать уникальные имена.