Возможный дубликат:
Как получить результат из строки MySQL с несколькими столбцами с одинаковым именем с PHP?
У меня есть две таблицы, и они имеют похожие имена столбцов.
Запрос:
SELECT a.name,b.name FROM tablea a JOIN tableb b ON a.id = b.id
Результаты помещаются в массив:
while ($row = mysql_fetch_array($results)){ $aname = $row['name']; }
Как только я добавил в эту вторую таблицу, я заметил, что $aname
использует данные Tableb.
Вопрос (ы): Как я могу хранить оба столбца name
, $row['a.name']
не работает. Мое предположение, может быть, мне нужно, чтобы каждый результат в запросе. Какие-либо предложения? Должен ли я так же избегать присвоения имен столбцов в будущем ?
I know mysql_* is depreciated. Save your energy.
Ваша догадка была правильной. Вам нужно создать ALIAS
для столбцов, чтобы вы могли получить его однозначно,
SELECT a.name Name1, b.name Name2 FROM tablea a JOIN tableb b ON a.id = b.id
то вы можете позвонить
$row['Name1']
Есть выход.
mysql_field_table()
сообщит вам имя поля набора результатов, заданное дескриптором $result
и порядковой позицией. В сочетании с mysql_field_name()
это должно быть все, что вам нужно:
// Fetch the table name and then the field name $qualified_names = array(); for ($i = 0; $i < mysql_num_fields($result); ++$i) { $table = mysql_field_table($result, $i); $field = mysql_field_name($result, $i); array_push($qualified_names, "$table.$field"); }
Вы можете обернуть это в свою собственную функцию mysql_fetch_qualified_array
, например, чтобы дать вам ассоциативный массив с ключом "table.field"
:
function mysql_fetch_qualified_array($result) { ... // caching $qualified_names is left as an exercise for the reader ... if ($row = mysql_fetch_row($result)) { $row = array_combine($qualified_names, $row); } return $row; }