Forum » Izdelava spletišč » Težave z array
Težave z array
Kricert ::
Zdravo. Pišem php skripto, ki je sestavljena takole:
- najprej vnašam podatke v eno mysql tabelo
- nato vnašam podatke v drugo mysql tabelo
- nato podatke iz obeh tabel povezujem v tretji tabeli
Ker so podatki povezani preko ID-jev in ker na 14 ID-jev iz druge tabele pride 14-krat po en ID iz prve tabele nastane tu problem. ID-ji so v MySql avtomatsko dodeljeni in pri ustvarjanju tretje tabele uporabljam za podatke iz druge tabele LAST_INSERT_ID() v temle smislu:
$query = "INSERT INTO table VALUES (' ', '____', LAST_INSERT_ID(), 1, 1, 0, 0)";
Problem nastane ker bi rad tam kjer sem označil '____' vnašal sočasno tudi ID-je iz prve tabele, ki bi jih dobil na enak način ali pa z MYSQL_INSERT_ID(), shranil pa v array.
Poizkušal sem nekaj v smislu:
$last_id[0] = mysql_insert_id();
in potem
$query = "INSERT INTO table VALUES (' ', '$last[0]', LAST_INSERT_ID(), 1, 1, 0, 0)";
...in s številnimi podobnimi "rešitvami", tudi s foreach ali drugače urejenimi arrayi vendar se mi zdi da tipam v temi.
Če mi lahko kdorkoli pomaga ali pa ima kdo celo predlog za boljšo ureditev celotnega problema, bom zelo hvaležen!
LP
- najprej vnašam podatke v eno mysql tabelo
- nato vnašam podatke v drugo mysql tabelo
- nato podatke iz obeh tabel povezujem v tretji tabeli
Ker so podatki povezani preko ID-jev in ker na 14 ID-jev iz druge tabele pride 14-krat po en ID iz prve tabele nastane tu problem. ID-ji so v MySql avtomatsko dodeljeni in pri ustvarjanju tretje tabele uporabljam za podatke iz druge tabele LAST_INSERT_ID() v temle smislu:
$query = "INSERT INTO table VALUES (' ', '____', LAST_INSERT_ID(), 1, 1, 0, 0)";
Problem nastane ker bi rad tam kjer sem označil '____' vnašal sočasno tudi ID-je iz prve tabele, ki bi jih dobil na enak način ali pa z MYSQL_INSERT_ID(), shranil pa v array.
Poizkušal sem nekaj v smislu:
$last_id[0] = mysql_insert_id();
in potem
$query = "INSERT INTO table VALUES (' ', '$last[0]', LAST_INSERT_ID(), 1, 1, 0, 0)";
...in s številnimi podobnimi "rešitvami", tudi s foreach ali drugače urejenimi arrayi vendar se mi zdi da tipam v temi.
Če mi lahko kdorkoli pomaga ali pa ima kdo celo predlog za boljšo ureditev celotnega problema, bom zelo hvaležen!
LP
AndrejS ::
Morda noben ne ve kaj sploh hočeš. V SQL ne moreš vnašat Arrayev. Lahko morda vneseč vrstico tolikokrat kot je IDjev ali pa IDje ločiš z vejicami v polju string.
Vse je odvisno kaj bi rad neredil
Vse je odvisno kaj bi rad neredil
Kricert ::
Ja sem še enkrat prebral in morda sem narobe zastavil naslov teme.
Torej pustimo arraye...
Imam tabelo 1 in tabelo 2, s php skripto najprej vnašam vrednosti v prvo, nato v drugo in vsak zapis dobi naključen zaporeden ID (auto_incr.)
Nato bi rad v tretji tabeli po 14 zapisov v drugo tabelo združil z enim zapisom v tabelo 1
Takole, če mamo v prvi tabeli
-----------------
345 polje1
346 polje2
347 polje3 ...
in v drugi tabeli
------------------------------
3456 nekodrugopolje1
3457 nekodrugopolje2
3458 nekodrugopolje3
3459 ...
zdaj bi imel rad v tabeli 3
----------------------------------
1 | 345 ... 3456
2 | 345 ... 3457
3 | 345 ... 3458
4 | itd.
Tako da je 14x ponovljen ID iz prve tabele in so mu dodani po en ID iz druge tabele
Dosedaj sem uspel naredit toliko da z last_insert_id v loopu pridobivam zadnje zapisane id-je v tabelo 2, vendar ne morem iste tehnike uporabiti za obe tabeli, zato bi rad pri prvi tabeli shranjeval vse zadnje ID-je iz loopa v nek array, če pa ima kdo boljšo predstavo kako rešit problem pa lahko komot to tud drugače napišem
Torej pustimo arraye...
Imam tabelo 1 in tabelo 2, s php skripto najprej vnašam vrednosti v prvo, nato v drugo in vsak zapis dobi naključen zaporeden ID (auto_incr.)
Nato bi rad v tretji tabeli po 14 zapisov v drugo tabelo združil z enim zapisom v tabelo 1
Takole, če mamo v prvi tabeli
-----------------
345 polje1
346 polje2
347 polje3 ...
in v drugi tabeli
------------------------------
3456 nekodrugopolje1
3457 nekodrugopolje2
3458 nekodrugopolje3
3459 ...
zdaj bi imel rad v tabeli 3
----------------------------------
1 | 345 ... 3456
2 | 345 ... 3457
3 | 345 ... 3458
4 | itd.
Tako da je 14x ponovljen ID iz prve tabele in so mu dodani po en ID iz druge tabele
Dosedaj sem uspel naredit toliko da z last_insert_id v loopu pridobivam zadnje zapisane id-je v tabelo 2, vendar ne morem iste tehnike uporabiti za obe tabeli, zato bi rad pri prvi tabeli shranjeval vse zadnje ID-je iz loopa v nek array, če pa ima kdo boljšo predstavo kako rešit problem pa lahko komot to tud drugače napišem
Kricert ::
Bom zelo ekspliciten kaj hočem doseči!
Dve vrednosti se vneseta iz forme, katere akcija je sledeča php skripta:
//priklop za zbirko
//pobiranje podatkov iz obrazca
$spremenljivka1 = $_POST["spremenljivka1"];
$spremenljivka2 = $_POST["spremenljivka2"]; //vrednost med 1 in 5
//določim novo spremenljivko, ki jo bom rabil kasneje v skriptu
if ($spremenljivka2 < 2) {$spremenljivka3 = 1; }
elseif ($spremenljivka2 > 1 AND $spremenljivka2 < 3) {$spremenljivka3 = 3; }
elseif ($spremenljivka2 > 2 AND $spremenljivka2 < 4) {$spremenljivka3 = 9; }
elseif ($spremenljivka2 > 3 AND $spremenljivka2 < 5) {$spremenljivka3 = 27; }
else $spremenljivka3 = 81;
// začnem loop, s katerim bom zapisoval v prvo tabelo, kaj se bo zapisalo je odvisno od spremenljivk 1 in 2, število vnosov pa je odvisno od spremenljivke 3, ki je ustvarjena na podlagi sprem.2
for ($n = 1; $n < = $spremenljivka3; $n++) {
$pisanjevtabelo1 = "INSERT INTO tabela1 VALUES (nekaj, nekaj, $spremenljivka2, nekaj)";
$result = mysql_query($pisanjevtabelo1);
}
//v drugem loopu bomo pisali v naslednjo tabelo
$spremenljivka4 = 14 * $spremenljivka3; //sprem.4 določa število zapisov, preračunana pa je iz sprem.3
for ($p = 1; $p < = $spremenljivka4; $p++) {
$spremenljivka5 //ustvarjena iz naključnih vrednosti, ni pomembna za naše težave
$query = "INSERT INTO tabela2 VALUES (nekaj, $spremenljivka5', nekaj, nekaj, nekaj)";
$result = mysql_query($query);
//zdaj začnemo vstavljat podatke v tretjo tabelo, ker smo v loopu bomo vstavili vsak zadnji ID od prejšnjega inserta v tabelo
$query1 = "INSERT INTO tabela3 VALUES (nekaj, NEKAJ, last_insert_id(), nekaj, nekaj, nekaj)"; //NEKAJ označuje prostor, kjer bi radi imeli zapisane tudi IDje iz vnosov v tabelo1 (po 14 enakih zapored) - jedro problema! kako to doseči?!
$result1 = mysql_query($query1);
}
Torej
- pisanje v tabelo1 (in avtomatsko določanje IDjev)
- pisanje v tabelo2 (isto)
- v tabeli 3 se na 14 različnih IDjev iz tabele 2 veže po 14 enakih IDjev iz tabele 1
- kako to doseči?
Dve vrednosti se vneseta iz forme, katere akcija je sledeča php skripta:
//priklop za zbirko
//pobiranje podatkov iz obrazca
$spremenljivka1 = $_POST["spremenljivka1"];
$spremenljivka2 = $_POST["spremenljivka2"]; //vrednost med 1 in 5
//določim novo spremenljivko, ki jo bom rabil kasneje v skriptu
if ($spremenljivka2 < 2) {$spremenljivka3 = 1; }
elseif ($spremenljivka2 > 1 AND $spremenljivka2 < 3) {$spremenljivka3 = 3; }
elseif ($spremenljivka2 > 2 AND $spremenljivka2 < 4) {$spremenljivka3 = 9; }
elseif ($spremenljivka2 > 3 AND $spremenljivka2 < 5) {$spremenljivka3 = 27; }
else $spremenljivka3 = 81;
// začnem loop, s katerim bom zapisoval v prvo tabelo, kaj se bo zapisalo je odvisno od spremenljivk 1 in 2, število vnosov pa je odvisno od spremenljivke 3, ki je ustvarjena na podlagi sprem.2
for ($n = 1; $n < = $spremenljivka3; $n++) {
$pisanjevtabelo1 = "INSERT INTO tabela1 VALUES (nekaj, nekaj, $spremenljivka2, nekaj)";
$result = mysql_query($pisanjevtabelo1);
}
//v drugem loopu bomo pisali v naslednjo tabelo
$spremenljivka4 = 14 * $spremenljivka3; //sprem.4 določa število zapisov, preračunana pa je iz sprem.3
for ($p = 1; $p < = $spremenljivka4; $p++) {
$spremenljivka5 //ustvarjena iz naključnih vrednosti, ni pomembna za naše težave
$query = "INSERT INTO tabela2 VALUES (nekaj, $spremenljivka5', nekaj, nekaj, nekaj)";
$result = mysql_query($query);
//zdaj začnemo vstavljat podatke v tretjo tabelo, ker smo v loopu bomo vstavili vsak zadnji ID od prejšnjega inserta v tabelo
$query1 = "INSERT INTO tabela3 VALUES (nekaj, NEKAJ, last_insert_id(), nekaj, nekaj, nekaj)"; //NEKAJ označuje prostor, kjer bi radi imeli zapisane tudi IDje iz vnosov v tabelo1 (po 14 enakih zapored) - jedro problema! kako to doseči?!
$result1 = mysql_query($query1);
}
Torej
- pisanje v tabelo1 (in avtomatsko določanje IDjev)
- pisanje v tabelo2 (isto)
- v tabeli 3 se na 14 različnih IDjev iz tabele 2 veže po 14 enakih IDjev iz tabele 1
- kako to doseči?
Zgodovina sprememb…
- spremenil: Kricert ()
Kricert ::
Sem rešil, sem ugotovil kako iz array pošiljaš podatke v mysql, če bo imel kdo podoben problem mi lahko pošlje zasebno sporočilo ali mejl
LP
LP
BluPhenix ::
Lahko pa tukaj napišeš kratek povzetek rešitve. Bo marsikdo hvaležen.
Podpisa ni več, ker so me poskušali asimilirati.
Kricert ::
Ko vstavljam vrednosti v prvo tabelo, ID-je, ki se samodejno dodeljujejo shranjujem v array (to se dogaja v prvem loopu)
$last_id = mysql_insert_id();
$array_ID[$num] = $last_id;
V drugem loopu se pa tako ali tako dogaja zadnji insert in pri vstavljanju v skupno tabelo uporabljam iz tega drugega inserta last_insert_id()
Tako da v skupno tabelo vstavljam v loopu
for ($m=1; $m < 14; $m++)
{
$sql = "insert into table values (last_insert_id(), $array_ID[$m])";
tak postopek je dobro opravljati celostno (transakcija) da se ali celoten zgodi ali pa v celoti ne, v primeru če bi prišlo vmes do napak, če se vam sočasno odvija več skriptov pa je dobro uporabit tudi lock tables zarad last_inserted_id
LP
$last_id = mysql_insert_id();
$array_ID[$num] = $last_id;
V drugem loopu se pa tako ali tako dogaja zadnji insert in pri vstavljanju v skupno tabelo uporabljam iz tega drugega inserta last_insert_id()
Tako da v skupno tabelo vstavljam v loopu
for ($m=1; $m < 14; $m++)
{
$sql = "insert into table values (last_insert_id(), $array_ID[$m])";
tak postopek je dobro opravljati celostno (transakcija) da se ali celoten zgodi ali pa v celoti ne, v primeru če bi prišlo vmes do napak, če se vam sočasno odvija več skriptov pa je dobro uporabit tudi lock tables zarad last_inserted_id
LP
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | MS Access (strani: 1 2 )Oddelek: Programiranje | 7431 (5489) | travica |
» | mysql, insert, values, selectOddelek: Programiranje | 1844 (1671) | slosi |
» | [PHP] moj forum :DOddelek: Izdelava spletišč | 1532 (1371) | medobear |
» | mySQL(+php) auto_increment field v tabeli.. Kako...?Oddelek: Izdelava spletišč | 1115 (1047) | Zzzzzzz |
» | Še eno mysql vprašanjeOddelek: Programiranje | 938 (863) | lordgreg |