Autocomplete pro SQL

Našeptávače ve webových editorech kódu jsou převážně tupé. Mají seznam klíčových slov, která jednoduše doplňují podle toho, co začnete psát. V SQL jim můžete dát ještě seznam tabulek a jejich sloupců a doplňují pak i ty. Ale když napíšete třeba SELECT * FROM tabulka WHERE | tak netuší, že mají doplňovat sloupce jen z tabulky tabulka. Třeba v CodeMirror musíte napsat WHERE tabulka.|, aby se zobrazily sloupce jen z dané tabulky.

Rozhodl jsem se to vzít za jiný konec. Místo, aby se za všech okolností napovídalo všechno, tak se napovídá jen to, co v daném kontextu dává smysl. Takže třeba:

phpMyAdmin plnohodnotný parser SQL, ale pro autocomplete ho nepoužívá. Navíc parser běží na serveru, takže se s každým napsaným písmenkem musí odesílat požadavek a čekat na odpověď. Já jsem si napsal pár regulárních výrazu v JavaScriptu, které nakonec udělají mnohem víc muziky. Když jsem to dokončil, tak jsem nemohl uvěřit vlastním očím: Je to v podstatě SQL wizard, ve kterém celý dotaz sestavíte skoro jen pomocí šipky dolů a Enteru. Ale když chcete něco speciálního, tak se snaží nepřekážet.

ukázka autocomplete SQL

Živá ukázka

Jistě sami přijdete na to, jaké tabulky a sloupce jsou definované. Začněte psát SQL dotaz:

Jakub Vrána, Řešení problému, 6.4.2025, diskuse: 2 (nové: 0)

Diskuse

Aleš:

Zkusil jsem políčko v článku na iPhone a script posouvá kurzor vždy na začátek. Takže když napíšu SE, v poli se objeví ES. Jinak díky za super feature!

ikona Jakub Vrána OpenID:

Díky za upozornění, opravil jsem. Ale hlavní problém je, že iOS nepodporuje <select size>, takže to ještě budu muset předělat.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2025 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.