Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Из одного SQL столбца в 3 столбца
 
 автор: Vova   (03.04.2007 в 11:15)   письмо автору
 
 

Как из одного столбца 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

   
 
 автор: Trianon   (03.04.2007 в 11:40)   письмо автору
 
   для: Vova   (03.04.2007 в 11:15)
 

что такое столбцы SQL (A, B, C) и если они содержат одну и ту же сущность, зачем её размазывать по разным полям?

Или Вы хотите вывести результат запроса в несколько столбиков таблицы HTML?

Так в этом смысле вывод ничем не отличается от вывода обычного массива, не связанного с SQL.

   
 
 автор: Vova   (03.04.2007 в 11:48)   письмо автору
 
   для: 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

   
 
 автор: Trianon   (03.04.2007 в 12:07)   письмо автору
 
   для: Vova   (03.04.2007 в 11:48)
 

У строк таблиц реляционных БД нет собственного порядка. Во всяком случае - на пользовательском уровне.

   
 
 автор: Vova   (03.04.2007 в 12:34)   письмо автору
 
   для: Trianon   (03.04.2007 в 12:07)
 

//У строк таблиц реляционных БД нет собственного порядка. Во всяком случае - на пользовательском уровне.
Т.е. реализовать мою задачу по перемещению или копированию из одного столбца в три не получится?
Или например тоже самое, только импортировать из одного столбца csv файла в таблицу с тремя полями.

   
 
 автор: Trianon   (03.04.2007 в 12:48)   письмо автору
 
   для: 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($f4096';''"'))) break;  $a mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $b mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $c mysql_escape_string($r[0]);
    
$sql .= "$sep('$a','$b','$c')\r\n";
    
$sep ','
}

mysql_query($sql);


в предположении, что csv-файл не превышает размера буфера запроса MySQL.

   
 
 автор: Vova   (04.04.2007 в 12:01)   письмо автору
 
   для: 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($f4096';''"'))) break;  $a mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $b mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $c mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $d mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $e mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) break;  $g mysql_escape_string($r[0]);
    if(!(
$r fgetcsv($f4096';''"'))) 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. Как сделать, чтобы в базе выводились все записи?

   
 
 автор: Trianon   (04.04.2007 в 12:18)   письмо автору
 
   для: 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($f4096';''"'))) break;  $a mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($f4096';''"'))) break;  $b mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($f4096';''"'))) break;  $c mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($f4096';''"'))) break;  $d mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($f4096';''"'))) break;  $e mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($f4096';''"'))) break;  $g mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($f4096';''"'))) 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>'); 


?> 


Разные буквы в списке - специально, чтоб себя конкретно запутать?

   
 
 автор: Vova   (04.04.2007 в 12:35)   письмо автору
 
   для: 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($z4096';''"'))) break;  $a mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $b mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $c mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $d mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $e mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $f mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) 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 записей? Как сделать, чтобы вставлялись все записи?

   
 
 автор: Trianon   (04.04.2007 в 12:39)   письмо автору
 
   для: Vova   (04.04.2007 в 12:35)
 

Прикрепите архив с файлом, и дамп структуры базы.

   
 
 автор: Vova   (04.04.2007 в 12:48)   письмо автору
 
   для: Trianon   (04.04.2007 в 12:39)
 

Всё, разобрался. Спасибо огромное. )
Это я по ошибке первое поле сделал типом tyneint(), а оно имеет ограничение в 127. Теперь сделал его int(); и все записи прекрасно занеслись в базу.

   
 
 автор: Vova   (04.04.2007 в 16:51)   письмо автору
 
   для: 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($z4096';''"'))) break;  $a mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $b mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $c mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $d mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $e mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $f mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) 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   (05.04.2007 в 09:59)   письмо автору
 
   для: 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($z4096';''"'))) break;  $a mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $b mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $c mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $d mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $e mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $f mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) 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($z4096';''"'))) break;  $a mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $b mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $c mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $d mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $e mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) break;  $f mysql_escape_string($r[0]); 
    if(!(
$r fgetcsv($z4096';''"'))) 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);  
    
       } 


?> 

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования