Autor | Zpráva | ||
---|---|---|---|
Karel Urban Profil |
#1 · Zasláno: 26. 2. 2009, 21:52:45 · Upravil/a: Karel Urban
Zdravim, mam problém s příkazem BETWEEN (pokud je teda vůbec vhodný). Data z databáze vybírám příkazem: select * from alu_rafky where roztec like '5/120/72.5%' order by cena;. Potřeboval bych ale, aby mi z databáze "vyjely" data, která jsou rovna '5/120/72.5%' a větší, nicméně lišit se smí jen poslední číslo 72.5. Čili potřebuju z databáze vytáhnout '5/120/72.5%' a třeba taky '5/120/74.1%' apod. Zkoušel jsem příkaz: select * from alu_rafky where roztec between '5/120/72.5%' and '5/120/100%';, ale nevybralo mi to nic.
Předem díky za rady. |
||
Nox Profil |
#2 · Zasláno: 26. 2. 2009, 23:32:32
Řekl bych že between povoluje pouze práci s čísli a '5/120/72.5%' je řetězec a ne číslo, dokonce to není ani smysluplně na číslo převeditelné
Nemám veškeré informace, ale možná je to špatný návrh databáze a tato čísla se měla ukládat zvlášť Navíc pokud použijete like tak v daném řetězci znamená každé "%" 0-nekonečno libovolných znaků, takže první dotaz by vybral i třeba záznam s '5/120/72.5A3g' |
||
blaaablaaa Profil |
#3 · Zasláno: 27. 2. 2009, 09:06:38
Karel Urban
muzete zkusit substring a substring_index, ale je to docela prasarna takhle delat, doporucuji predelat db SUBSTRING_INDEX(SUBSTRING(roztec, 6) ,'%',1) -- pocita s tim, ze ze vse pred tim percentilem ma 6 znaku |
||
Joker Profil |
#4 · Zasláno: 27. 2. 2009, 09:32:51
Karel Urban
Řekl bych typický příklad problémů, které může způsobit špatný návrh databáze. Moc o tom nevím, ale tuším význam toho údaje je něco jako počet šroubů, vzdálenost mezi nimi (čili rozteč) a to třetí číslo nevím. Čili, za prvé, ukládáte tři nezávislé hodnoty v jednom sloupci- hrubá chyba. Za druhé, čísla se ukládají jako řetězec. |
||
Karel Urban Profil |
#5 · Zasláno: 27. 2. 2009, 15:26:25
Problém vyřešen, místo posledního 100 jsem dal 99 a funguje to(poslední číslo stejně větší než 99 nikdy nebude. Jinak třetí číslo je středová díra. Je to taková prasárnička, ale databázi už jsem takhle dostal a předělávát 12000 záznamů je prostě.....hustý....Vyhledávání funguje, "špatný" disky to neháže(menší centr díra nebo špatnou rozteč, takže to neřešim. Nicméně potřebuju k tomu ještě přidat (už z jinýho sloupce) další hodnotu, mělo by to vypadat nějak takhle: select * from alu_rafky where roztec between '5/120/72.5%' and '5/120/99%' + tam nějak potřebuju přidat ET between '35' and '40' ;
|
||
Časová prodleva: 15 let
|
0