Autor | Zpráva | ||
---|---|---|---|
sifik Profil |
#1 · Zasláno: 29. 4. 2012, 20:20:52
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 |
#3 · Zasláno: 29. 4. 2012, 20:34:51
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 * |
#4 · Zasláno: 30. 4. 2012, 15:44:38
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 |
#5 · Zasláno: 30. 4. 2012, 15:50:10
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 |
#6 · Zasláno: 30. 4. 2012, 15:53:26
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 |
#7 · Zasláno: 30. 4. 2012, 18:13:23
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); |
||
Časová prodleva: 12 let
|
0