При выборе всего из MySQL могу ли я переименовать определенные поля и по-прежнему выбирать все остальное, как в *


Еще раз привет, ребята. Итак, я пытаюсь выяснить, как выбрать каждое поле в нескольких таблицах базы данных mysql и вывести полученную таблицу в файл .csv для Excel. Я нашел печально известный вопрос stackoverflow, касающийся вывода .csv, и у меня есть весь код там. Итак, я думаю, что я спрашиваю:

Есть ли способ выполнить запрос mysql, который выглядит примерно так?

SELECT * prof.id AS youth_id FROM time time, profiles prof, WHERE foo='bar'

И попросите его выбрать все из обеих (или, например, 4) таблиц, но выберите идентификатор как youth_id, или мне нужно указать КАЖДОЕ значение, которое я хочу, если мне нужно выбрать определенные значения в качестве другого имени?

Я бы не хотел указывать каждое поле, так как у меня есть 50+ для вывода.

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

Author: Ryan, 2011-05-20

4 answers

Вам не нужно указывать каждое поле. Вместо этого вы можете сделать следующее:

SELECT *, prof.id AS youth_id FROM time time, profiles prof

Однако вышеизложенное вернет все столбцы из двух таблиц плюс столбец, который вы переименовали. Таким образом, если в исходных двух таблицах всего 4 столбца, и вы переименуете один, вы получите 5 столбцов в результирующем наборе.

 13
Author: secreteyes, 2011-05-19 23:58:23

Райан, ты можешь делать все, что захочешь. Единственная загвоздка в том, что результаты будут включать как идентификатор youth_id, так и идентификатор с одинаковыми значениями для каждого. Если вам нужен только идентификатор youth_id, а не идентификатор, вам придется перечислить все нужные столбцы вместо использования "*". Кстати, если у вас под рукой есть phpmyadmin, вы можете просто ввести sql и сразу увидеть результат.

 1
Author: yitwail, 2011-05-19 23:56:55

Ну, поскольку никакое другое решение не кажется идеальным, я на секунду подумаю нестандартно. Если вы не возражаете сделать два звонка. Одним из них может быть схема таблицы (где хранятся имена столбцов), а затем вы можете программно изменять имена столько, сколько необходимо (не вводя их все). После этого сделайте второй вызов с взорванным массивом в качестве его ВЫБРАННОЙ части.

Пример:

<?php
$tables = array ('table1','table2','table3');
$NameAliases = array('table1.id'=>'profid');

foreach ($tables as $table)
{
    $sql = "SHOW COLUMNS FROM $table;";
    $result = mysql_query($sql);

    $columns = array();

    while ($row = mysql_fetch_array($result))
    {
        $search = array_search($table.'.'.$row["Field"],$NameAliases);
        if ($search === true)
        {
            $parts = explode('.',$NameAliases[$search]);
            $columns[] = "$table.{$row["Field"]} AS {$parts[1]}"; //get the side of the dot
        }
        else
        {
            $columns[] = "$table.{$row["Field"]}";
        }
    }
}
$columnstring = implode(', ',$columns);
$sql = "SELECT $columnstring FROM ".implode(', ',$tables)." WHERE 1=1";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result))
{

}
?>

(Понятия не имею, работает ли это вообще)

 0
Author: Ben, 2011-05-21 02:09:40

Если вы действительно не хотите дублирования этого столбца (т.Е. Получения как идентификатора, так и идентификатора youth_id) из

SELECT *, prof.id AS youth_id 
FROM time 
INNER JOIN profiles prof 
   ON time.profile_id = prof.id 
WHERE foo = 'bar'

Вы можете SELECT * из каждой таблицы, кроме таблицы со столбцом, который вы хотите переименовать:

SELECT time.*, prof.id AS youth_id, prof.forename, prof.surname 
FROM time 
INNER JOIN profiles prof 
   ON time.profile_id = prof.id 
WHERE foo = 'bar'

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

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

 0
Author: Duncan Irvine, 2012-10-26 13:48:41