Получение имени таблицы строки из запроса MySQL, который захватывает из нескольких таблиц - PullRequest
1 голос
/ 14 августа 2011

У меня есть некоторый код PHP / MySQL, который извлекает данные из нескольких разных таблиц (используя внутренние объединения).Это выглядит примерно так:

$query = "SELECT * FROM table1 INNER JOIN table2 USING (key)";
$data = mysqli_query($dbc, $query);

while ($row = mysqli_fetch_array($data)) {
   echo $row[1];
}

Итак, код достаточно прост, но я хочу сделать так, чтобы таблица выводилась в каждой строке внутри цикла while, поскольку она может находиться в одном из двух элементов.таблицы.

Я видел, что есть некоторые старые функции mysql, такие как mysql_field_table и mysql_tablename, которые могут помочь, но все они устарели.

Буду признателен за любые советы о том, как этого добиться.

Ответы [ 3 ]

0 голосов
/ 14 августа 2011

Вы можете выбрать данные со специальным идентификатором для каждой таблицы вместо использования *

select table1.row1 as t1r1, table2.row1 as t2r1,..... from .....

А внутри php вы можете искать строки t1 и t2 и делать что-то соответственно.

0 голосов
/ 14 августа 2011

То, что вы можете сделать, это повторить более одного поля из вашей таблицы результатов (которое, мы надеемся, теперь содержит информацию из обеих таблиц.

$query = "SELECT * FROM table1 INNER JOIN table2 USING (key)";
$data = mysqli_query($dbc, $query);

while ($row = mysqli_fetch_array($data)) 
{   
  echo $row[1] . " " . <b>$row[2]</b>;
}

... а затем $row[3] и т.д ...

Или получить доступ к имени / полю столбца по имени столбца или псевдониму, предоставленному AS.

$query = "SELECT * FROM table1 INNER JOIN table2 USING (key)";
$data = mysqli_query($dbc, $query);

while ($row = mysqli_fetch_assoc($data)) 
{   
  echo $row["c_name1"] . " " . $row["c_name2"];
}

Где " c_name1 " и " c_name2 " - ваши имена столбцов.

0 голосов
/ 14 августа 2011

Используйте ключевое слово AS для переименования всех столбцов.

$select_clause = '';
$tables = array('tblA', 'tblB');
foreach($tables as $tbl) {
    mysql_query('SHOW COLUMNS FROM ' . $tbl);
    while ($row = mysql_fetch_assoc())
        $select_clause .= '`'.$tbl.'`.`'.$row['Field'].'` AS `'.$tbl
           .'_'.$row['Field'].'`,';
}
$select_clause = substr($select_clause, 0, -1);
mysql_query('SELECT '.$select_clause.' FROM /*...*/ ');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...