select * from A left join B on A.columnc=B.columnd
результаты, возвращенные выше SQL, будут содержать оба столбца A и B.
И что, если A и B имеют несколько столбцов с тем же именем?
Как получить значение из PHP?
Вероятно, вы хотите быть более явным в своем запросе. Таким образом вы можете предоставить псевдонимы для своих столбцов:
SELECT A.foo as a_foo, B.foo as b_foo FROM A LEFT JOIN B ON A.columnc = B.columnd
Ответ действительно в документации PHP :
«Если два или более столбца результата имеют одинаковые имена полей, последний столбец будет иметь приоритет. Чтобы получить доступ к другим столбцам (именам) с тем же именем, вам нужно либо получить доступ к результату с числовыми индексами, используя mysql_fetch_row()
или добавить псевдонимы. См. пример в mysql_fetch_array()
о псевдонимах. "
Especialy mysql_fetch_array()
кажется лучшим кандидатом, когда вы настаиваете на использовании звезды в заявлении select:
$row = mysql_fetch_array($result, MYSQL_BOTH)
Затем вы можете ссылаться на однозначные поля на $row[name]
и на неопределенное значение на $row[col_number]
, но это ограничивает переносимость вашего кода (возможно, следующая версия MySQL будет возвращать столбцы в другом порядке?) , Рекомендуемое решение состоит в том, чтобы переписать ваш запрос и перечислить все обязательные поля вместо того, чтобы использовать звезду и для двусмысленных – использовать псевдонимы.
Вы должны использовать псевдонимы столбцов в инструкции select.
В Java + MySQL из объекта ResultSet вы можете использовать, например, getString («a.id»), а также getString («b.id»), если ваш запрос был похож на «SELECT a.id, b.id FROM a, б»
Я не знаю, есть ли что-то подобное в PHP.
С уважением
Это может быть полезно для кого-то: поскольку я использовал некоторые шаблоны, я не мог легко использовать псевдонимы каждый раз, и я хотел, чтобы ассоциативный массив был удобен в использовании. CREDIT PILCROW за его ответ о том, как mysql_fetch_array на объединенные таблицы, но столбцы имеют одинаковое имя , но в MySQLi:
$qualified_names = array(); for ($i = 0; $i < mysqli_num_fields($result); ++$i) { $fieldinfo=mysqli_fetch_field_direct($result,$i); $table = $fieldinfo->table; $field = $fieldinfo->name; $qualified_names["$table.$field"]="$table.$field"; } $newrow = array_combine($qualified_names, mysqli_fetch_array($result,MYSQLI_NUM));