Autor Zpráva
Taps
Profil
Chtěl jsem se zeptat jak bych mohl udělat lépe dotaz na databázi :

$sql=mysql_query("select * from tabulka where id='$id' and typ='$typ' and kategorie='$kategory' and datum='$od' between datum='$do'");

Existuje nějaká jednodušší nebo rychlejší možnost než abych vkládal pořád jen and. Díky
djlj
Profil
No tak když chceš vybírat data na základě víc podmínek, tak je logické, že tam budeš mít víc podmínek. Pokud ti to tak vadí, tak můžeš použít CONCAT.
Loyza
Profil *
Já bych k tomu snad jen dodal: Jsi si jistý, že tam potřebuješ mít tu * Skutečně potřebuješ tahat komplet všechno? No dobrá, možná dneska potřebuješ, ale co když do té tabulky zítra přidáš další sloupce, budou v tomto skriptu také potřeba? Myslím si, že hvězdička na tomto místě není vhodná
DFly
Profil
Taps hele takove dve drobnosti okolo where id='$id'

ve vetsine pripadu je id unikatni (coz tedy asi v tvem pripade nebude)
a je to id u tebe ciselny sloupec nebo string
pri pouziti SELECT ... WHERE id='$id' pokud je id ciselny sloupec se string automaticky prevede na cislo, ale POZOR uz se nebude brat v potaz index tohoto sloupce, takze mozna zbytecne prijdes o vykon - to se ale da testnout a uvidis
DFly
Profil
a samozrejme jak popsali lidi vyse - zhodnotit zda je hvezdicka nutna a kdyz ne, tak vsude kde to jde pouzit CONCAT
djlj
Profil
vsude kde to jde pouzit CONCAT
Ono to něčemu pomůže?

Jinak bych ještě samozřejmě udělal index na sloupce id, typ, kategotrie a datum.
DFly
Profil
djlj no, SQLku ne, ale pro dalsi praci se scriptem je to vhodne, nemusej se zbytecne spojovat retezce, a bez zasahu do scriptu se s tim da pracovat - napr Jmeno Prijmeni, se jen rozsiri Jmeno 'prezdivka' Prijmeni
osobne se snazim z dotazu dostat toho co nejvice, aby se to nemuselo dale resit ve scriptu.
Kajman_
Profil *
DFly
ale POZOR uz se nebude brat v potaz index tohoto sloupce

Jste si jistý? Moje verze mysql vesele použije index i když je číselné id v uvozovkách nebo ne.
DFly
Profil
Kajman_ koukni se na te dotaz pres explain
jo a jakou mas verzi - mozna nejaka nova uz je bez "problemmu"
djlj
Profil
DFly
Moje verze MySQL 5.032 a i předchozí 4.1 index bez problému použila. To, cos popsal, se týká jiných databází, mysql ne. Zkus spustit REPAIR tabulka, možná to tvůj problém vyřeší ;).

pro dalsi praci se scriptem je to vhodne, nemusej se zbytecne spojovat retezce
To, co popisuješ, je opravdu vhodné snad jen u jména s příjmením a některých dalších podobných případů, kterých je však pomálu.
Kajman_
Profil *
koukni se na te dotaz pres explain

Však to jsem dělal, proto jsem psal, kde jste na to přišel Vy. (A i verze 4.0 index použije).
DFly
Profil
Kajman_, djlj
hm, tak to byl asi problem urcite verze - nedavno jsem updatoval - a ted uz je to v pohode
...prave proto me to prekvapilo, a asi jsem nebyl sam, kdyz uz je to opraveny

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