Как получить результат из строки MySQL с несколькими столбцами с одинаковыми именами с помощью PHP? - PullRequest
9 голосов
/ 13 сентября 2009
select * from A left join B on A.columnc=B.columnd

результаты, возвращаемые вышеупомянутым SQL, будут включать оба столбца A и B.

А что если А и В имеют несколько столбцов с одинаковыми именами?

Как получить значение из PHP?

Ответы [ 5 ]

18 голосов
/ 13 сентября 2009

Возможно, вы хотите быть более точным в своем запросе. Таким образом, вы можете предоставить псевдонимы для ваших столбцов:

SELECT
  A.foo as a_foo,
  B.foo as b_foo
FROM A
LEFT JOIN B ON A.columnc = B.columnd
7 голосов
/ 13 сентября 2009

Ответ актуален в документации PHP :

"Если два или более столбцов результата имеют одинаковые имена полей, последний столбец будет иметь приоритет. Чтобы получить доступ к другим столбцам с тем же именем, вам необходимо получить доступ к результату с помощью числовых индексов, используя mysql_fetch_row() или добавьте псевдонимы. См. Пример в mysql_fetch_array() описании псевдонимов. "

Особенно mysql_fetch_array() кажется лучшим кандидатом, когда вы настаиваете на использовании звездочки в операторе выбора:

$row = mysql_fetch_array($result, MYSQL_BOTH) 

Тогда вы можете ссылаться на однозначные поля $row[name] и на неоднозначные $row[col_number], но это ограничивает переносимость вашего кода (возможно, следующая версия MySQL будет возвращать столбцы в другом порядке?) Рекомендуемое решение - переписать ваш запрос и перечислить все обязательные поля вместо звездочки, а для неоднозначных - использовать псевдонимы.

2 голосов
/ 13 сентября 2009

Вы должны использовать псевдонимы столбцов в операторе выбора.

1 голос
/ 25 июля 2015

Это может быть полезно кому-то: поскольку я использовал некоторые шаблоны, я не мог легко использовать псевдонимы каждый раз, и я хотел ассоциативный массив для простоты использования. 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));
1 голос
/ 17 августа 2010

В Java + MySQL из объекта ResultSet вы можете использовать, например, getString ("a.id"), а также getString ("b.id"), если ваш запрос был похож на "SELECT a.id, b.id ОТ А, В "

Не знаю, есть ли что-то подобное в PHP.

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...