sql >> Databasteknik >  >> RDS >> Mysql

Finns det ett bättre sätt att hämta data från två tabeller samtidigt med Sphinx/MySQL?

Du kommer inte riktigt undan med att inte ha två MySQL-frågor. Du kan väl, antingen genom att bara kombinera dem till ett, med UNION. Eller genom att skapa en ny kombinerad "tabell" (antingen en vy eller en materialiserad vy) - men tycker verkligen inte att det är värt ansträngningen. Två frågor är helt okej - som du säger de indexerade.

Du kan använda ett sfinxindex (och därmed en sökfråga) - genom att skapa ett nytt kombinerat index. Eftersom du säger att dina nycklar inte är unika, måste du skapa en ny syntetisk nyckel.

t.ex...

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

Detta ger dig en falsk nyckel och ett attribut för att identifiera vilken tabell resultatet kom från. Du kan använda detta för att få det ursprungliga bordet det kom ifrån. (det finns många andra sätt att göra samma sak)

Detta gör att du kan köra en fråga, kan få kombinerade resultat.

... MEN inte övertygad om att det är en bra idé. För om resultaten är asymmetriska kan du missa resultat. Säg att det finns 20 matchande resultat från en tabell och 10 från en annan. Säg att du visar de 10 bästa resultaten, nu på grund av gränsen, resultaten från den andra tabellen, kan mycket väl vara dolda under den första tabellen (extrema exempel, i verkligheten, förhoppningsvis blandade de sig). Två separata frågor, låter dig garantera att få NÅGRA resultat från varje tabell.

... så efter allt det där. Håll dig till det du har. Det är okej.



  1. Effektiv lagring av användaruppladdade bilder i filsystemet

  2. Räkna och visa hur många av specifika kolumner som resultat

  3. Dela fast värde till länder baserat på daglig intäktsandel

  4. MariaDB kan inte starta efter uppdatering:[Varning] Kan inte skapa testfil /home/mysql/beta.lower-test