При выборе всего из MySQL я могу переименовать определенные поля и по-прежнему выбирать все остальное, как с *
Привет, ребята. Итак, я пытаюсь выяснить, как выбрать каждое поле через несколько таблиц в базе данных mysql и вывести результирующую таблицу в a .csv-файл для Excel. Я нашел печально известный вопрос о stackoverflow .csv ouput и есть весь код там. Итак, я думаю, что я спрашиваю:
есть ли способ сделать запрос mysql, который выглядит примерно так?
SELECT * prof.id AS youth_id FROM time time, profiles prof, WHERE foo='bar'
и выберите все из обеих (или как 4) таблиц, но выберите id как youth_id, или мне нужно указать каждое значение, которое я хочу, если мне нужно выбрать определенные значения в качестве другого имени?
Я хотел бы не указывать каждое поле, так как у меня есть 50+ для вывода.
Я пытался искать, но не могу найти то, что мне нужно. Я думаю, если бы вы могли указать мне в правильном направлении, это было бы здорово.
4 ответов
вам не нужно указывать каждое поле. Вместо этого вы можете сделать следующее:
SELECT *, prof.id AS youth_id FROM time time, profiles prof
однако вышеизложенное вернет все столбцы из двух таблиц плюс столбец, который вы переименовали. Поэтому, если исходные две таблицы имеют всего 4 столбца, и вы переименуете один, вы получите 5 столбцов в результирующем наборе.
Райан, ты можешь делать, что хочешь. Единственный улов-результаты будут включать как youth_id, так и id с одинаковыми значениями для каждого. Если вы хотите только youth_id & not 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))
{
}
?>
(Не знаю, работает ли это вообще)
Если вы действительно не хотите, чтобы дублирование столбца (т. е. получение id и 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'
Это позволит вам получить все столбцы от времени, а также перечисленные из профилей. Вам все равно нужно перечислить все столбцы в таблице, в которой вы ищете псевдоним столбца, но, по крайней мере, вам не нужно перечислять все.
конечно, существует также аргумент, что вы должны перечислить все столбцы в любом случае, если ваша схема изменится в какой-то момент, но это другая история.