При выборе всего из 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+ для вывода.
Я пытался искать, но не могу найти то, что мне нужно. Я думаю, если бы вы могли указать мне правильное направление, это было бы здорово.
4 answers
Вам не нужно указывать каждое поле. Вместо этого вы можете сделать следующее:
SELECT *, prof.id AS youth_id FROM time time, profiles prof
Однако вышеизложенное вернет все столбцы из двух таблиц плюс столбец, который вы переименовали. Таким образом, если в исходных двух таблицах всего 4 столбца, и вы переименуете один, вы получите 5 столбцов в результирующем наборе.
Райан, ты можешь делать все, что захочешь. Единственная загвоздка в том, что результаты будут включать как идентификатор youth_id, так и идентификатор с одинаковыми значениями для каждого. Если вам нужен только идентификатор youth_id, а не идентификатор, вам придется перечислить все нужные столбцы вместо использования "*". Кстати, если у вас под рукой есть phpmyadmin, вы можете просто ввести sql и сразу увидеть результат.
Ну, поскольку никакое другое решение не кажется идеальным, я на секунду подумаю нестандартно. Если вы не возражаете сделать два звонка. Одним из них может быть схема таблицы (где хранятся имена столбцов), а затем вы можете программно изменять имена столько, сколько необходимо (не вводя их все). После этого сделайте второй вызов с взорванным массивом в качестве его ВЫБРАННОЙ части.
Пример:
<?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))
{
}
?>
(Понятия не имею, работает ли это вообще)
Если вы действительно не хотите дублирования этого столбца (т.Е. Получения как идентификатора, так и идентификатора 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'
Это позволит вам получить все столбцы из времени, а также перечисленные из профилей. Вам все равно нужно перечислить все столбцы в таблице, в которой вы хотите создать псевдоним столбца, но, по крайней мере, вам не нужно перечислять все до единого.
Конечно, есть еще и аргумент что вы все равно должны перечислять все столбцы на случай, если ваша схема в какой-то момент изменится, но это уже другая история.