|
|
|
| Как из одного столбца SQL (Столбец А) разнести данные по трём столбцам SQL (Столбцы A, B, C)?
Данные в столбце А в таком порядке
A
a1
b1
c1
a2
b2
c2
a3
b3
c3
Разнести их по столбцам A B C в таком порядке:
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3 | |
|
|
|
|
|
|
|
для: Vova
(03.04.2007 в 11:15)
| | что такое столбцы SQL (A, B, C) и если они содержат одну и ту же сущность, зачем её размазывать по разным полям?
Или Вы хотите вывести результат запроса в несколько столбиков таблицы HTML?
Так в этом смысле вывод ничем не отличается от вывода обычного массива, не связанного с SQL. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 11:40)
| | Столбцы SQL (A, B, C) - это таблица в MySQL (MSSQL) c полями A, B, C.
А мне надо из таблицы с одним полем A разнести данные в новую таблицу с уже тремя полями A, B, C.
И данные разнести по алгоритму что был приведён выше:
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3 | |
|
|
|
|
|
|
|
для: Vova
(03.04.2007 в 11:48)
| | У строк таблиц реляционных БД нет собственного порядка. Во всяком случае - на пользовательском уровне. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 12:07)
| | //У строк таблиц реляционных БД нет собственного порядка. Во всяком случае - на пользовательском уровне.
Т.е. реализовать мою задачу по перемещению или копированию из одного столбца в три не получится?
Или например тоже самое, только импортировать из одного столбца csv файла в таблицу с тремя полями. | |
|
|
|
|
|
|
|
для: Vova
(03.04.2007 в 12:34)
| | У csv-файла порядок строк, безусловно, есть.
И если задача только в этом -
<?
$f = fopen('file.csv', 'r');
$sql = 'INSERT INTO tab (A,B,C) VALUES'; $sep = "\r\n";
for(;;)
{
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
$sql .= "$sep('$a','$b','$c')\r\n";
$sep = ',';
}
mysql_query($sql);
|
в предположении, что csv-файл не превышает размера буфера запроса MySQL. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 12:48)
| | Спасибо. Всё хорошо работает.
Только почему-то в базу заносит только 127 записей, а у меня их 298.
Вот такой код
<?
$f = fopen('file.csv', 'r');
$sql = 'INSERT INTO pwd (A,B,C,D,E,F,G) VALUES'; $sep = "\r\n";
for (;;)
{
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $d = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $e = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $g = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $h = mysql_escape_string($r[0]);
$sql .= "$sep('$a','$b','$c','$d','$e','$g','$h')\r\n";
$sep = ',';
echo($a); echo($b); echo($c); echo($d); echo($e); echo($g); echo($h); echo('<br>');
}
mysql_query($sql);
?>
|
Разбиваю файл на 7 столбцов. В файле выводятся все 298 записей, а в базе только 127. Как сделать, чтобы в базе выводились все записи? | |
|
|
|
|
|
|
|
для: Vova
(04.04.2007 в 12:01)
| | Значит, всё же превышает. Попробуйте так:
<?
$f = fopen('file.csv', 'r');
for (;;)
{
$sql = 'INSERT INTO pwd (A,B,C,D,E,F,G) VALUES';
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $d = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $e = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $g = mysql_escape_string($r[0]);
if(!($r = fgetcsv($f, 4096, ';', '"'))) break; $h = mysql_escape_string($r[0]);
$sql = "INSERT INTO pwd (A,B,C,D,E,F,G) VALUES ('$a','$b','$c','$d','$e','$g','$h')\r\n";
mysql_query($sql);
echo($a); echo($b); echo($c); echo($d); echo($e); echo($g); echo($h); echo('<br>');
}
?>
|
Разные буквы в списке - специально, чтоб себя конкретно запутать? | |
|
|
|
|
|
|
|
для: Trianon
(04.04.2007 в 12:18)
| | Нее, запутать ничего не хочу. )
Просто изначально была $f в $f = fopen('file.csv', 'r'); , поэтому я её убрал из столбцов.
Но можно сделать и так
<?
$z = fopen('file.csv', 'r');
for (;;)
{
$sql = 'INSERT INTO pwd (A,B,C,D,E,F,G) VALUES';
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $d = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $e = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $f = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $g = mysql_escape_string($r[0]);
$sql = "INSERT INTO pwd (A,B,C,D,E,F,G) VALUES ('$a','$b','$c','$d','$e','$f','$g')\r\n";
mysql_query($sql);
echo($a); echo($b); echo($c); echo($d); echo($e); echo($f); echo($g); echo('<br>');
}
?>
|
И всё таки, почему у меня в базу вставляются только 127 записей? Как сделать, чтобы вставлялись все записи? | |
|
|
|
|
|
|
|
для: Vova
(04.04.2007 в 12:35)
| | Прикрепите архив с файлом, и дамп структуры базы. | |
|
|
|
|
|
|
|
для: Trianon
(04.04.2007 в 12:39)
| | Всё, разобрался. Спасибо огромное. )
Это я по ошибке первое поле сделал типом tyneint(), а оно имеет ограничение в 127. Теперь сделал его int(); и все записи прекрасно занеслись в базу. | |
|
|
|
|
|
|
|
для: Vova
(04.04.2007 в 12:48)
| | Видимо задам некорректный вопрос, но всё же может есть знающие люди: можно ли это код реализовать не на php+MySQL, а на C+MSSQL? Или же это реализовать на T-SQL?
<?
$z = fopen('file.csv', 'r');
for (;;)
{
$sql = 'INSERT INTO pwd (A,B,C,D,E,F,G) VALUES';
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $d = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $e = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $f = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $g = mysql_escape_string($r[0]);
$sql = "INSERT INTO pwd (A,B,C,D,E,F,G) VALUES ('$a','$b','$c','$d','$e','$f','$g')\r\n";
mysql_query($sql);
}
?>
|
| |
|
|
|
|
|
|
|
для: Vova
(04.04.2007 в 16:51)
| | Вопрос по PHP+MySQL по моему примеру.
Как можно таким образом завести в базу сразу 2 файла - file.csv и file2.csv
Пытаюсь таким образом, не получается, заводится только первый файл.
<?
$z = fopen('file.csv', 'r');
for (;;)
{
$sql = 'INSERT INTO pwd (A,B,C,D,E,F,G) VALUES';
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $d = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $e = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $f = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $g = mysql_escape_string($r[0]);
$sql = "INSERT INTO pwd (A,B,C,D,E,F,G) VALUES ('$a','$b','$c','$d','$e','$f','$g')\r\n";
mysql_query($sql);
}
$z = fopen('file2.csv', 'r');
for (;;)
{
$sql = 'INSERT INTO pwd (A,B,C,D,E,F,G) VALUES';
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $a = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $b = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $c = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $d = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $e = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $f = mysql_escape_string($r[0]);
if(!($r = fgetcsv($z, 4096, ';', '"'))) break; $g = mysql_escape_string($r[0]);
$sql = "INSERT INTO pwd (A,B,C,D,E,F,G) VALUES ('$a','$b','$c','$d','$e','$f','$g')\r\n";
mysql_query($sql);
}
?>
|
| |
|
|
|
|