Fórum Root.cz
Hlavní témata => Server => Téma založeno: Tomáš 23. 06. 2014, 11:34:51
-
Ahoj, měl by jeden hloupý dotaz a ale nepříjemně mě překvapil.
Mám zjednodušený sql příkaz tabulky prijemky, nicméně doklad je VARCHAR(50) a id int(9), vyhledávám podle ID(číslo příjemky) nebo dokladu. Nicméně pokud doklad začíná na číslo je nalezen záznam doklad '3CD...' ale také je převeden id na int a proto my vyhoví i id = 3 kde dělám chybu ? Respektive dá se databáze (MYSQL) donutit nepřekládat string na int ale na null či "" ?
SELECT `prijemky`.*
FROM `prijemky`
WHERE `prijemky`.`doklad` LIKE '3CD%' OR `prijemky`.`id` = '3CD'
mysql> SELECT `prijemky`.*
-> FROM `prijemky`
-> WHERE `prijemky`.`doklad` LIKE '3CD%' OR `prijemky`.`id` = '3CD' ;
+----+-----------+----------------+---------------+----------+---------------------+----------------+---------------------+------+
| id | doklad | dodavatel | datum_prijeti | poznamka | vlozeno | zamestnanec_id | upraveno | stav |
+----+-----------+----------------+---------------+----------+---------------------+----------------+---------------------+------+
| 3 | 214000915 | FIRMA | 2014-01-15 | | 2014-01-16 14:01:10 | 6 | 2014-01-20 11:34:48 | 1 |
+----+-----------+----------------+---------------+----------+---------------------+----------------+---------------------+------+
1 row in set, 1 warning (0.00 sec)
-
Stačí neporovnávat mezi sebou string a integer.
-
Děkuji, ale to mi taky došlo.
Samozřejmě můžu přidat funkci a testovat vstup pak rozhodnout jakou variantu zvolit. Ale co když doklad bude 234 ? Nebo budu požadovat po uživateli výběr hledaného sloupce ID/DOKLAD. Nicméně považuju to za krok zpět. Proto hledám zda není cesta přes sql.
-
SELECT `prijemky`.*
FROM `prijemky`
WHERE `prijemky`.`doklad` LIKE '3CD%' OR `prijemky`.`id` LIKE '3CD'
-
cital som tvoju otazku viac krat asi chces toto:
SELECT `prijemky`.*
FROM `prijemky`
WHERE `prijemky`.`doklad` LIKE '3CD%' OR (`prijemky`.`id` = '3CD' and '3CD' REGEXP '[0-9]+')
-
alebo pouzi BINARY na ten string s ID