Jak wypełniać baze danych losowymi rekordami

Odpowiedz Nowy wątek
2014-12-15 19:23
0

Potrzebuje skryptu co będzie wstawiał mi np 1000000 losowych rekordów do bazy danych. Mam problemy bo ten kod nie wstawia .

 <?php
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die("Nie można się połączyć:". mysql_error());
  }
 
// Tworzenie bazy danych
/*if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo " Baza danych utworzona ";
  }
else
  {
  echo " Tworzenie bazy danych wystąpił błąd: " . mysql_error();
  }
 
// Tworzenie tabeli
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Osoby
(
Imie varchar(15),
Nazwisko varchar(15),
Wiek int
)";
*/
 
$imiona = array('Paweł', 'Ania', 'Kasia', 'Ewa');
$nazwiska = array('Nowak', 'Kowalski', 'Wiśniewski', 'Kuboszek');
$wieki =array('3','5','1','5');
 
for($i=0; $i<100; $i++)
{
   $nazwisko = $nazwiska[rand(0, count($nazwiska) - 1)];
   $imie = $imiona[rand(0, count($imiona) - 1)];
   $wiek = $wieki[rand(0,count($wieki) - 1)];
   $msql = 'INSERT INTO `my_db` (`Imie`, `Nazwisko`,`Wiek`) VALUES ("'.$imie.'", "'.$nazwisko.'", "'.$wiek.'")';
}
 
// Wykonanie kwerendy
 
mysql_close($con);
?>

Pozostało 580 znaków

2014-12-15 19:32
adruab
1

Może zacznij od przepisania kodu tak, by zamiast zamiast 100 zapytań wykonało się jedno.
Samo zapytanie zbuduj w pętli, a dopiero potem je wykonaj.

INSERT INTO `my_db`
   (`Imie`, `Nazwisko`,`Wiek`)
VALUES
  ('Imie1', 'Nazwisko1', 'Wiek1'),
  ('Imie2', 'Nazwisko2', 'Wiek2'),
  ('Imie3', 'Nazwisko3', 'Wiek3'),
  ('Imie4', 'Nazwisko4', 'Wiek4');

Pozostało 580 znaków

2014-12-15 20:27

Pewnie dlatego nic się nie dzieje, bo nie wykonujesz żadnego mysql_query (które swoją drogą jest zdeprecjonowane podobnie jak inne mysql_*).


Pozostało 580 znaków

2014-12-15 23:40
0

poprawiłem to ale dalej nic

 <?php
$con = mysqli_connect("localhost","root","");
if (!$con)
  {
  die("Nie można się połączyć:". mysqli_error());
  }
 
// Tworzenie bazy danych
/*if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo " Baza danych utworzona ";
  }
else
  {
  echo " Tworzenie bazy danych wystąpił błąd: " . mysql_error();
  }
 
// Tworzenie tabeli
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Osoby
(
Imie varchar(15),
Nazwisko varchar(15),
Wiek int
)";
*/
 
$imiona = array('Paweł', 'Ania', 'Kasia', 'Ewa');
$nazwiska = array('Nowak', 'Kowalski', 'Wiśniewski', 'Kuboszek');
$wieki =array('3','5','1','5');
 
for($i=0; $i<100; $i++)
{
   $nazwisko = $nazwiska[rand(0, count($nazwiska) - 1)];
   $imie = $imiona[rand(0, count($imiona) - 1)];
   $wiek = $wieki[rand(0,count($wieki) - 1)];
   $msql = 'INSERT INTO `my_db` (`Imie`, `Nazwisko`,`Wiek`) VALUES ("'.$imie.'", "'.$nazwisko.'", "'.$wiek.'")';
}
 
// Wykonanie kwerendy
mysqli_query($con,$msql);
 
mysqli_close($con);
?>

Pozostało 580 znaków

2014-12-16 07:02
3

Teraz wykonujesz jedno zapytanie, dodając jeden rekord.


Pozostało 580 znaków

2014-12-16 21:32
0

Udał mi się to zrobić. Dlaczego mi różną ilość rekordów do tabeli wpisuje raz 413 , 426. Ja powinno być 1000. Jak zrobić na stronie czas mierzący ładowanie

<?php
error_reporting(0);
$con = mysqli_connect("localhost","root","","my_db");
if($con)
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
 
for($i=0; $i<1000; $i++)
{
$query = "INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES ('imie', 'nazwisko', 'wiek')";
mysqli_query($con,$query);
}
 
mysqli_close($con);
?> 
edytowany 1x, ostatnio: Cyber999, 2014-12-16 21:33

Pozostało 580 znaków

2014-12-17 11:43
1

Może problemem jest zbyt długi czas wykonywania skryptu? Wykonujesz 1000 insertów do bazy zamiast 1. Może spróbuj:

$query = "INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES ";
for($i=0; $i<1000; $i++)
{
    $query .= "('imie', 'nazwisko', 'wiek'),";
}
$query = substr($query, 0, -1); // na końcu nie może być przecinka więc go ucinam

wtedy pójdzie tylko jedno zapytanie.

[Mirek]


Jeden zespół, tysiące możliwości!

Pozostało 580 znaków

2014-12-19 21:20
0

Działa to ale maksymalnie 10000 mi dodaj dlaczego nie można więcej ? Znacie jaką funkcje, która mierzyła by wykonanie czasu skryptu i wyświetlała ją.

edytowany 1x, ostatnio: Cyber999, 2014-12-19 21:39

Pozostało 580 znaków

2014-12-19 21:55
1

Może proces PHP jest ubijany (time limit) czy coś.


edytowany 1x, ostatnio: Patryk27, 2014-12-19 21:55

Pozostało 580 znaków

2014-12-21 17:16
0

wyłączyłem to już

$stara_wartosc = ini_set ( 'max_execution_time', 0 );

dodanie znacznika <code class="php"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2014-12-21 17:44
Wstawiaj kod w znaczniki kolorujące składnię; - furious programming 2014-12-21 17:44

Pozostało 580 znaków

2014-12-22 08:12
1
Cyber999 napisał(a):

Znacie jaką funkcje, która mierzyła by wykonanie czasu skryptu i wyświetlała ją.

Na początku skryptu piszesz:

function utime (){
    $time = explode( " ", microtime());
    $usec = (double)$time[0];
    $sec = (double)$time[1];
    return $sec + $usec;
}
$start = utime(); 

Na końcu:

$end = utime(); 
$run = $end - $start; 
echo "Czas generowania strony: " . substr($run, 0, 5) . " secs."; 

Jeden zespół, tysiące możliwości!
microtime(true) wystarczy, po co jakieś explode? - Patryk27 2014-12-22 10:00
Może to czas eksplozji? :> - furious programming 2014-12-22 19:10
@Patryk27 - Wydaje się, że masz rację, lecz u mnie te dwa sposoby zwracają różne wyniki - taka ciekawostka. Wersja z explode wydaje się być bliższa rzeczywistości w moich próbach. @furious programming To jest czas, gdy wszystko zniknie i nastaną komputery kwantowe :) - kchteam 2014-12-23 14:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0