как mysql_fetch_array на объединенные таблицы, но столбцы имеют одинаковое имя

Возможный дубликат:
Как получить результат из строки 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; }