« 1 2 »
Autor Zpráva
lenkali
Profil *
ERROR 1267 (HY000): Illegal mix of collations (cp1250_czech_cs,IMPLICIT) and (la
tin1_swedish_ci,COERCIBLE) for operation '='

tohle se vypíše, když hledám podle jména v databázi

jméno vepsiuju do
<input type="text" name="jmenokamarada" size="38"></p>

a nasledne hodnotu vkladam do podminky SELECT, jenze mi to vypisuje ERROR, prosim o radu
lenkali
Profil *
třeba když napíšu jméno : Čenschý , to nahlásí chybu a přitom v databázi takové jméno je a dokonce ve správném formátu cp1250_czech_cs
lenkali
Profil *
Už se tady tento problém řešil, prosím o vysvětlení, co znamená zapomenout ty LOWER, jak by to potom vypadalo v mém případě?

tento text kopiruju z jineho vlakna v teto diskuzi:

$query = mysql_query("select * from produkty
WHERE (
LOWER(nazev) LIKE '%".mb_strtolower($hledamtext)."%'
OR LOWER(search) LIKE '%".mb_strtolower($hledamtext)."%'
OR LOWER(popis) LIKE '%".mb_strtolower($hledamtext)."%'
)
AND sklad >= '1'
order by nazev ASC") or DIE(mysql_error());

Např. pokud vyhledávám slovo "červené" a v DB ve sloupci nazev mám "auto je červené", tak mi to nic nenajde.
Kajman_


Zasláno: 8.1.2008 20:24:10Citovat

A když zapomenete na všechny ty lower a necháte jen na těch sloupečcích porovnání končící na _ci, tak to také nejde? A máte to červené auto skladem?
Falcon

Zasláno: 8.1.2008 20:33:48Citovat

A když zapomenete na všechny ty lower
Tak teď to funguje skvěle.Bylo to těma lower.Moc děkuji.




Moje vyhledavani, jak mam yaimplementovat ten predeslz kod bey LOWER, prosim?

Select * from kamaradi where jmeno=$_REQUEST['jmenokamarada];
lenkali
Profil *
snažím se to upravovat ale ani takto to nefunguje:

(SELECT * from kamaradi where jmeno LIKE '%".mb_strtolower($_REQUEST['jmenokamarada'])."%' );
lenkali
Profil *
Jméno Čenschý mi to najde jen kdyz ho do databaze vlozim jako:

"censchy" ..tedy s malými písmeny a bez diakritiky.......
a vyhledávat dám opět "censchy" jen tak mi to najde

Jenže jméno může být vloženo jako Čenschý, ale i jako čenschý
a při vyhledávání může být zadáno čenschý nebo Čenschý, jak to prosím mám napsat do selectu?

(SELECT * from kamaradi where jmeno LIKE '%".mb_strtolower($_REQUEST['jmenokamarada'])."%' );

už si nevím rady
lenkali
Profil *
Uz jsem to upravila takto>

$jmenokam=$_REQUEST['jmenokamarada'];
SELECT * from kamaradi where jmenokamarada LIKE '%".mb_strtolower($jmenokam)."%'

nehlasi to konecne chyby, ale nemuze nic najit....proc prosim, poradte?
lenkali
Profil *
Tak chyby to porad hlasi...

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\mojedatabaze\vypis.php on line 362 Nebyly nalezeny žádné záznamy

:o(
lenkali
Profil *
Najde mi to zapis jen když je bez diakritiky a jen s malými písmeny, tedy "censchy" ale nenajde to "Čenschý"
lenkali
Profil *
Ještě jsem našla tohle v diskuzi:
$hledany = addslashes(strtolower($hledany));
$sql = "SELECT id FROM tabulka WHERE LOWER(retezec) LIKE '$hledany'";

asi to neumím zaimplementovat do svého kódu, prosím o pomoc, potřebuju
v DB vyhledat slova jako Čenský, Novák, Mičůnek, Zařadil, atd

vyhledává mi to jen kdyz ty jmena jsou v databazi ulozeny jako:
---censky novak micunek zaradil

A vyhledavat je dam opet jen jako:
---censky novak micunek zaradil

jméno vepsiuju pro vyhledávání podle jména do
<input type="text" name="jmenokamarada" size="38"></p>

A vyhledat se to snažím podminkou:
(SELECT * from kamaradi where jmeno LIKE '%".mb_strtolower($_REQUEST['jmenokamarada'])."%' );



prosim Vas moc o pomoc
Kajman_
Profil *
Nezapomněla jste na set names? Případně jaké porovnání (tedy i kódování) máte u toho sloupečku, ve kterém vyhledáváte?
lenkali
Profil *
Děkuji za reakci,

set names mám všude mysql_query("SET NAMES 'cp1250'");
lenkali
Profil *
Ve sloupečku mám
varchar(100)
cp1250_czech_cs
Tomasss
Profil *
Jde o dvě věci. Jednak velikost písmen a jednak vyřešení diakritiky.
Velikost písmen je triviální:

Uprav dotaz takto:
SELECT * from kamaradi where LCASE(jmenokamarada) LIKE '%".mb_strtolower($jmenokam)."%'

Diakritika je o něco náročnější, s tím neporadím.
lenkali
Profil *
Myslím, že Tome Tvůj kod dělá to, že

když vložím do políčka to co chci vyhledat, třeba "Mickal"
tak to zmenší písmenka na "mickal"

a prave takove jmeno se vsemi malymi pismenky to hleda v databazi....
ale co kdyz je v databazi "Mickal" .... s velkym M

to zase nenajde...
Tomasss
Profil *
Abych to upřesnil.

používám na vlastním webu toto:

SELECT * from kamaradi where LCASE(jmenokamarada) LIKE LCASE('%".$jmenokam."%')

a nemám problém
lenkali
Profil *
Tomasssi, děkuji moc, funguje to, velikost písmen to už v pořádku bere u slov bez diakritiky, první problém vyřešen, máš pravdu, Tvůj příkaz funguje, děkuji moc.
funguje: SELECT * from kamaradi where LCASE(jmenokamarada) LIKE LCASE('%".$jmenokam."%')


Prosím ještě o radu s diakritikou
Tomasss
Profil *
diakritika.. něco mě napadlo.

Pokud je ta aplikace teprve ve stadiu vývoje, tak bych možná udělal to, že bych měl v databázi kromě pole jmenokamarada ještě pole jmenoprohledani a do něj bych při vkládání vložil jméno převedené na lcase a očesané o diakritiku. Udělat toto na úrovni php není problém.

Pak by se zjednodušil i ten dotaz na:
SELECT * from kamaradi where jmenoprohledani LIKE LCASE('%".$jmenokam."%')
lenkali
Profil *
Když tam dám diakritiku, tak mi to vyhazuje:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
lenkali
Profil *
Tomasss...ještě budu špekulovat, děkuji za Tvůj čas...

přesto pokud se ještě najde nápad, zda to není v php.ini nebo jak by se mel upravit vyber:


SELECT * from kamaradi where LCASE(jmenokamarada) LIKE LCASE('%".$jmenokam."%')


tak, aby to vyhledavalo i s diakritikou, budu rada,


dekuji
lenkali
Profil *
Kdykoliv se tam objeví písmenko například "ř", tak to hlasi Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
lenkali
Profil *
Prosím někoho o pomoc
Tomasss
Profil *
lenkali
najdi si někde příklad, jak se maji načítat data z databáze. Jestli se nepletu, tak tuhle hlášku dostáváš díky tomu, že se snažíš procházet záznamy while cyklem a přitom ti dotaz žádný záznam nevrátil.

Jinak obecně: Mám skoro pocit, že sem píšeš dotazy rychleji, než sama přemýšlíš. Zkus taky něco samostatně.

Toto http://www.linuxsoft.cz/article.php?id_article=344 je web, který třeba mně v začátcích s mysql dost pomohl.
lenkali
Profil *
Ano, Tome, to je pravda, co píšeš a chápu smysl tohoto dotazu viz Tvá věta:

se snažíš procházet záznamy while cyklem a přitom ti dotaz žádný záznam nevrátil.

jenže záznam mi to nevrací z důvodu podmínky, kdy ve slově je právě gramatika, například písmenko "ř" proto mi to neumí vrátit výsledek...

už se s tím trápím dlouho, příklady jsem si našla viz v celém tomto vlákně...jenže nepomohlo mi to, Tvůj příkaz funguje, jen ne na gramatiku:



SELECT * from kamaradi where jmenoprohledani LIKE LCASE('%".$jmenokam."%')



jedná se mi o to, jak přidat gramatiku, vše je jinak funkční,
děkuji
Kajman_
Profil *
A stránky máte v jakém kódování? A opravdu voláte set names mezi připojením a vyhledávacím dotazem? Moc se mi tomu nechce věřit, když mysql_error vám hlásí kolizi cp1250 a latin1_swedish_ci.
lenkali
Profil *
Je možné, že to je v přepnutí poznámkového bloku na jiné kódování?
lenkali
Profil *
stránky mám v cp1250
Kajman_
Profil *
Ve stránkách se definuje toto kódování spíše jako windows-1250.
lenkali
Profil *
přepla jsem kódování poznámkového bloku a začalo to fungovat.....já se z toho zblázním

teď už jen detail:

najde mi to "Mičůnek", když napíšu do vyhledávače: "Mičůnek" nebo "mičůnek"

když ale zadám "micunek" nebo "Micunek" tak mi to nenajde "Mičůnek"

používám v selectu:
LOWER(jmenokamarada) LIKE '%".mb_strtolower($hledanykamarad)."%'


fuguje to správně nebo se dají ošetřit obě možnosti? Prosím ještě tohle.....
lenkali
Profil *
zase to nefunguje...
Kajman_
Profil *
Zkuste používat nějaký lepší editor... jEdit, pspad
« 1 2 »

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:

0