sql >> Databáze >  >> RDS >> Mysql

Existuje lepší způsob, jak získat data ze dvou tabulek najednou pomocí Sphinx/MySQL?

Nemůžete opravdu uniknout, když nebudete mít dva dotazy MySQL. Mohli byste je buď zkombinovat do jednoho, s UNION. Nebo vytvořením nové kombinované „tabulky“ (buď pohledu nebo zhmotněného pohledu) – ale opravdu si nemyslím, že to stojí za námahu. Dva dotazy jsou naprosto v pořádku - jak říkáte, že se indexovaly.

Můžete použít jeden index sfingy (a tedy jeden vyhledávací dotaz) – vytvořením nového kombinovaného indexu. Protože říkáte, že vaše klíče nejsou jedinečné, museli byste vytvořit nový syntetický klíč.

např....

sql_query = SELECT userid*2 AS id, 1 AS table_id, firstname AS one, lastname as two FROM tellycards_user_data \
              UNION \
            SELECT (id*2)+1 as id, 2 AS table_id, name AS one, screenshot AS two FROM tellycards_ripples
sql_attr_unit = table_id

Získáte tak falešný klíč a atribut k identifikaci, ze které tabulky výsledek pochází. Můžete to použít k získání původního stolu, ze kterého pochází. (existuje mnoho dalších způsobů, jak udělat totéž)

To vám umožní spustit jeden dotaz, můžete získat kombinované výsledky.

... ALE nepřesvědčil, že je to dobrý nápad. Protože pokud jsou výsledky asymetrické, mohou vám chybět výsledky. Řekněme, že existuje 20 odpovídajících výsledků z jedné tabulky a 10 z jiné. Řekněme, že ukazujete 10 nejlepších výsledků, nyní by se vzhledem k limitu mohly výsledky z druhé tabulky skrýt pod první tabulkou (extrémní příklad, ve skutečnosti, doufejme, že se prolínaly). Dva samostatné dotazy vám umožňují zaručit získání NĚKTERÝCH výsledků z každé tabulky.

...tak po tom všem. Drž se toho, co máš. To je v pořádku.



  1. Mysql localhost !=127.0.0.1?

  2. Co je SQLite?

  3. Který jedinečný klíč je zasažen mojí vložkou?

  4. MySQL Connect přes proxy v Javě