» »

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

Kricert ::

Noben ne ve? :(

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

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

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?

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

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


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

MS Access (strani: 1 2 )

Oddelek: Programiranje
647431 (5489) travica
»

mysql, insert, values, select

Oddelek: Programiranje
91844 (1671) slosi
»

[PHP] moj forum :D

Oddelek: Izdelava spletišč
71532 (1371) medobear
»

mySQL(+php) auto_increment field v tabeli.. Kako...?

Oddelek: Izdelava spletišč
61115 (1047) Zzzzzzz
»

Še eno mysql vprašanje

Oddelek: Programiranje
5938 (863) lordgreg

Več podobnih tem