Autor | Zpráva | ||
---|---|---|---|
slon_cz Profil |
#1 · Zasláno: 29. 7. 2018, 13:46:46
Dobrý den, potřebuji vygenerovat na jednom řádku vždy dva uživatele pod sebou z databáze.
Pomocí while ($row = $result->fetch_assoc()) { $row["tab1"]."<br />"; } vyberu řádek po řádku. Existuje možnost jak vypsat vždy takto v jednom řádku dva řádky z databáze po dvou? Tedy neco jako $row[0][tab1] - $row[1][tab1] a tim bych vypsal prvni a druhy radek, v dalsim loopu bych zase vzal treti a ctvrty radek, v dalsim paty a sesty a takhle dal a dal. Je to mozne? Budu rad za jakoukoliv radu! :) |
||
T-fon Profil |
Třeba takto:
$i = 1; while($row = $result->fetch_assoc()) { if ($i % 2 !== 0) { echo $row["tab1"] . ' - '; } else { echo $row["tab1"] . '<br>'; } $i++; } Edit: opravena chyba dle RastyAmateur |
||
RastyAmateur Profil |
#3 · Zasláno: 29. 7. 2018, 16:40:25
T-fon:
Jen místo foreach použít while (:
|
||
slon_cz Profil |
#4 · Zasláno: 29. 7. 2018, 16:54:37
Takto to mám, to funguje skvěle pro výpis na stránce, když bych z toho chtěl ale sestavil sql insert příkaz, aby v jednom sql příkazu jsem mohl použít vždy ty dva řádky.. :/
Prostě abych vypsal takto ty dva řádky a zaroveň jsem mohl použít s každým jedním loopem provést jeden sql insert into "blabla" (tab1, tab,2) ("$row['tab1']", "$row['tab1']"); Snad mě chápete jak to myslím :D Prostě jeden loop = dva řádky za sebou z databáze = oba řádky vložit v jednom insertu druhy loop = dalsi dva radky = vlozeni insert .... ... .. |
||
T-fon Profil |
#5 · Zasláno: 29. 7. 2018, 17:04:17
Já sice nechápu, co chceš docílit, ale tak prostě v tom if bude insert into tab1 $row['tab1']" a v else insert into tab2 $row['tab1']".
|
||
slon_cz Profil |
#6 · Zasláno: 29. 7. 2018, 17:12:05
Chci docílit toho, že se zúčastněných uživatelů z tabulky všechny vytáhnu a poté je chci rozdělit do duelů, tudíž potřebuji vzít z tabulky vždy dva řádky (dva uživatele) a ty vložit v jednom insertu do tabulky s duely, id obou uživatelů uložit v jednom insertu.
|
||
Keeehi Profil |
slon_cz:
To ale přece můžeš udělat v té else větvi. V if větvi si ten řádek úložíš do pomocné proměnné a v else větvi to použiješ společně s nově vyraženým údajem. Nicméně jde to udělat samozřejmě i tak, že se v jednom průchodu vytáhnou dva záznamy. Obě řešení jsou však úplně ekvivalentní. while(true) { $rows[0] = $result->fetch_assoc(); $rows[1] = $result->fetch_assoc(); if (!is_array($rows[0]) || !is_array($rows[1])) { break; } // INSERT INTO tabule VALUES ($rows[0]['id'], $rows[1]['id']) } |
||
slon_cz Profil |
Omlouvám se všem za zmatek, neumím vysvětlovat věci :/
Podle @Keeehi by se tedy v if uložilo to pole do $pole a v else by se vytahlo? Vím, že toho už budu chtít moc, ale byl by někdo ochotný mi to tam dosadit? Moc to pořádně nechápu, jak by to fungoval. Děkuji mnohokrát. while($row = $result->fetch_assoc()) { if (($i++ % 2) == 1) { $pole = $row["id"]; } else { .... INSERT INTO tabulka VALUES ($pole , $row['id']) ... } } V pořádku, již to chápu! Omlouvám se za svoje dlouhé vedení, je to úplně primitivní teď už :D děkuji ještě jednou :)))) |
||
Keeehi Profil |
#9 · Zasláno: 29. 7. 2018, 18:30:18
slon_cz:
Jen ještě dodám, že to vůbec neřeší když se vytáhne lichý počet záznamů. Tedy ono to fungovat bude, jen se ten poslední prostě přeskočí. |
||
slon_cz Profil |
#10 · Zasláno: 29. 7. 2018, 19:06:04
Taktéž jsem na to nyní přišel při zkoušení. Je možnost jak to udělat i s lichým počtem uživatelů? Zapsat uživatele do duelu ale samotneho?
|
||
Keeehi Profil |
Je to takové trochu ošklivé ale asi nějak takto
while(true) { $rows[0] = $result->fetch_assoc(); $rows[1] = $result->fetch_assoc(); if (!is_array($rows[0])) { break; } if (!is_array($rows[1])) { $rows[1] = ['id' => null] } // INSERT INTO tabule VALUES ($rows[0]['id'], $rows[1]['id']) } |
||
Časová prodleva: 5 let
|
0