Jak napsat select (vrací Resource id #5)?
Testujeme 6 stejných bankovních ústavů v každém kraji. Do databáze se uloží data z formuláře, co už testeři navštívili. Chci udělat přehled, co už je hotové. Třeba tabulka pro středočeský kraj. Chci tam mít šest řádků s vypsanými bankami a prázdné místo pro město a ulici. Když to tester navštíví, doplní se město a ulice. Např tedy
<td>Česká spořitelna a. s.</td>
<?php
$sc_cs_mesto = mysql_query(
"Select mesto FROM bb_2013 WHERE kraj='Středočeský kraj' LIKE banka='Česká spořitelna a. s.'"
);
?>
<td><?php echo $sc_cs_mesto; ?>
Jenže tohle mi vrací Resource id #5
Co dělám blbě?
ve Where ti chybi AND mezi podminkami
Pokud nepouzivas v bance zastupne znaky, ale testujes vzdy cely nazev, je zbytecne tam davat LIKE, dej tam =
Jo vlastně AND. To jsem moula Sesmolil jsem to takto
a stále Resource id #5
Takhle bude ten dotaz o hodně rychlejší, ale stejně se podívej, jak se čte výsledek níže.
Jenže furt je něco blbě, i když jsem udělal
Takto to nemůžeš přímo číst.
Takhle:
To mi sice zmizel onen nápis, ale město se mi neobjevilo
Tam asi nebude potřeba while. Je to vždy jen jedno místo (jedno město).
Potřebuji vytáhnout pouze to jedno město
a ked si ten select, ktory si dal vyssie hodis priamo v phpmyadmin, tak co ti to vypluje?
Nojo, nevyjede
Já chci vytáhnout jednu konkrétní buňku buuuuuuuuuu
no, par tipu:
1) funguje ti to na polozky bez diakritiky? Problem s jazykovou konverzi...
zkus:
2) je vyraz skutecne v dB? Rozumej - otrimovano, aby tam nebyly prebytecne mezery na zacatku a konci apod.
zkus:
3) zkousel jsi to pro jiny vyraz?
viz obrázek níže. V phpmyadminu se vypíše.
jenze PHP myadmin je webova stranka, ktera automaticky konvertuje cestinu pro kodovani v databazi. Funguje to pro zaznam nez diakritiky? Rozumej - pokud mas stranu v 1250 a databazi UTF 8, musi se to konvertovat...
Dej si treba jen jednu podminku a bez diakritiky...
Všechno mám v 1250 web i porovnání v databázi. Praha se mi načítá normálně. Jenže tu jsem začal dělat jinak
a to se mi nelíbí, jelikož nemám prázdná města a ulice, načte se jen vyplněné. Avšak možná to tak nakonec udělám celé a bude to
K vidění jsou ty pokusy tady
http://kochlear.cz/banka-bez-barier/2013/vypisy/vy plnene.php?php echo $zaznam['mesto']; ?
když tam dám
while( $row = mysql_fetch_array($sc_cs_mesto))
a v buňce <?php echo $row ['mesto']; ?>, zmizne sice Resource id, ale nic se nezobrazí.
neco jsi vynechal...
result prohnano funkci mysql_fetch_assoc, ktera zpristupni obsah...
Když se nic nezobrazi, dej SELECT COUNT(*) FROM ... at vis pocet vracenych radku. Muzes mit problem s cestinou... (viz. vyse)
resource id #5 atd. ti vypisuje pretoze nepouzivas mysql_fetch_array alebo mysql_fetch_assoc.
s najvacsou pravdepodobnostou mas problem s diakritikou.
cize daj sem co ti vypise v sqlku tento dotaz:
show variables where variable_name like '%coll%';
malo by to vyplut nieco podobne:
nojo, kódování
jdu studovat proč
no to mas trochu rozhasene. najidealnejsie je pouzivat utf8_czech_ci vsade. nastavis to v configu mysql servera.
len potom treba dat pozor, ze aj ked zmenis collation servera, treba zmenit collation aj na tabulkach.
ked si das: "show create table bb_2013" tak ti to vypluje kod tabulky a v nom najdes aj aku collation dana tabulka pouziva.
vid priklad:
CREATE TABLE `proces` (
`ProcesID` int(11) NOT NULL AUTO_INCREMENT,
`ProcesName` varchar(50) COLLATE utf8_slovak_ci NOT NULL,
`Catg` varchar(50) COLLATE utf8_slovak_ci NOT NULL,
`Img` varchar(100) COLLATE utf8_slovak_ci DEFAULT NULL,
`shortdesc` varchar(200) COLLATE utf8_slovak_ci DEFAULT NULL,
`longdesc` varchar(500) COLLATE utf8_slovak_ci DEFAULT NULL,
`detail` varchar(2000) COLLATE utf8_slovak_ci DEFAULT NULL,
PRIMARY KEY (`ProcesID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci
a len tak btw, collation nie je kodovanie. collation sluzi len na definiciu ako sa vyhodnocuju retazce. niektore collation napriklad dovoluju case sensitive vyhladavanie, alebo napriklad to, ze pri vyhladavani pismena "s" sa vyhladaju aj pismena "š". atd. cize nejde o kodovanie, to je characterset.
export tabulky a COLLATE má 1250
To jsem z toho jelen...
vid moj prispevok ohladne vysvetlenia collation o jedno vyssie.
cp1250_czech_cs je nejaky windows like ceske collation pricom "cs" znamena case sensitive. "ci" je case insensitive - co urcite odporucam viac.
Mě to nikdy nezlobilo, mám tak snad 50 jiných.
skus este upravit ten select:
Select mesto FROM bb_2013 WHERE trim(kraj)='Středočeský kraj' and banka LIKE '%Česká spořitelna a. s.%'
Nepomohlo
tak skus tieto premenne nastavit vsetky na cp1250_czech_cs a potom ci pojde tvoj povodny select. podla mna je cely problem v tom, ze je to rozhasene na rozne collation a nie je to ujednotene.
Variable_name Value
collation_connection utf8_unicode_ci
collation_database latin2_czech_cs
collation_server utf8_czech_ci
Dík za pomoc, nebudu se s tím nervovat, udělal jsem to jako jsem začal tu Prahu a nad tím vším udělám tabulku s kraji a počtem vyplněných, aby se nemuselo rolovat.
http://kochlear.cz/banka-bez-barier/2013/vypisy/vy plnene.php
Aby sis do budoucna ušetřil nervy, poopravil bych návrh databáze.
Zaveď si číselník krajů i bank.
Nejenomže se zbavíš výše řešeného problému - kód 001 v databázi najdeš třeba v čínštině.
Ale banka se třeba může přejmenovat. Neopravoval bys všechny záznamy, ale jenom políčko název v číselníku.