Autor Zpráva
sifik
Profil
Ahoj, nevím, zda jsem něco prošvihl, nebo jen zaspal dobu... ale u jednoduchého scriptu:

$q = mysql_query("select * from bot_dict");

    print_r(mysql_fetch_array($q));

výpis vypadá takhle:

5] => 2011-08-31 18:58:20 [dict_created] => 2011-08-31 18:58:20 [6] => Angličtina [dict_lang] => Angličtina [7] => 0 [recommended] => 0 [8] => [img] =>

jde o to, že se vytváří duplikáty, jednou s pořadovým klíčem a jednou s klíčem sloupečeku databáze. V čem je chyba? Nebo je to normální? nikdy dřív jsem si toho ale nevšiml...

Dále bych se chtěl zeptat, zda existuje nějaký způsob jak dostat data z databáze bez toho, abych nepoužil následující smyčku ?

while($dat = mysql_fetch_array($q))...

Protože současným modelem musím procházet data výše zmíněným způsobem, abych je připravil do pole... a následně procházel pole abych data vypsal mi připadá časově dost náročné... A obzvláště, když jsou tam ty výše zmíněné duplikované záznamy...

Předem děkuji za radu.
Medvídek
Profil
sifik:
mysql_fetch_array($result, MYSQL_NUM) - dostaneš v klíči čísla
mysql_fetch_array($result, MYSQL_ASSOC) - dostanes v klíčí název sloupce
Viz dokumentace, viď: By using MYSQL_BOTH (default), you'll get an array with both associative and number indices.
sifik
Profil
Děkuji, to je nějaká novinka? Nebo jsem si toho několik let nevšiml? :D .. k tomu výpisu do pole, když výsledek je více jak jeden řádek, asi nenajdu řešení, že?
mzk
Profil *
sifik:
protože současným modelem musím procházet data výše zmíněným způsobem, abych je připravil do pole... a následně procházel pole abych data vypsal mi připadá časově dost náročné
a proč si ty výsledky nenachystáš už přímo v databázi (něco jako WHERE, ORDER BY, LIMIT, .. ti nic neříká?).. ta * není žádná hitparáda. když sem hodíš jak to děláš, tak věřím, že ti někdo zkušenější rád poradí jak to udělat líp.
Ugo
Profil
taky dobrý prozření ;) novinka to rozhodně neni, k těm konstantám existuje u mysql ještě funkce - pro tebe asi mysql_fetch_assoc(); , která to vybírá jen v jedné variantě, pokud neděláš vyloženě obraz tabulky v db, tak by ti ale duplikace neměla vadit.

K tomu výpisu - existuje varianta (a dost rychlejší i se svym cyklem ;) ) kde můžeš určit číslo řádku, ale to nebude to co potřebuješ (mysql_result();), jesli jde o úpravu dat, tak jedině upřesnit dotaz jak říká mzk a jestli jde jen o výpis, tak ti nic nebrání je rovnou vypisovat.
Tori
Profil
sifik:
procházet data výše zmíněným způsobem, abych je připravil do pole... a následně procházel pole abych data vypsal mi připadá časově dost náročné“ - změřte si skutečné časy, jestli to je fakt tak zásadní rozdíl.
sifik
Profil
mzk:
(něco jako WHERE, ORDER BY, LIMIT, .. ti nic neříká?).. ta * není žádná hitparáda. k
Samozřejmě že těchto klauzulí hojně využívám... Příklad, který jsem uvedl, byl pouze ilustrační.

Tori:
změřte si skutečné časy, jestli to je fakt tak zásadní rozdíl.
Databáze s kterou pracuji je obrovská, procházet ve smyčkách tisíce položek je časově náročné. Potom jsem rád za každou ušetřenou smyčku.

Ugo:
mysql_result
Nevím, jaký je v poslední době rozdíl mezi mysql_result a mysql_num_rows. Dříve jsem měl v povědomí tento článek (http://php.vrana.cz/ziskani-poctu-radek.php), ale řádky, kde jakub vysvětluje proč je mysql_result rychlejší jsou nyní přeškrtlé.

Jinak tyto problémy řeší efektivně třída PDO. Např. metoda fetchAll, která vrací přímo pole požadovaných položek.

$q = $this->connect->prepare($sql);
$q->execute();
$array = $q->fetchAll(PDO::FETCH_ASSOC);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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