Autor Zpráva
slon_cz
Profil
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
T-fon:
Jen místo foreach použít while (:
slon_cz
Profil
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
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
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
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
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']) 
}

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: