Mysql
 sql >> Base de données >  >> RDS >> Mysql

Existe-t-il un meilleur moyen d'obtenir des données de deux tables à la fois avec Sphinx/MySQL ?

Vous ne pouvez pas vraiment vous en sortir sans avoir deux requêtes MySQL. Eh bien, vous pourriez, en les combinant simplement en un seul, avec UNION. Ou en créant une nouvelle "table" combinée (soit une vue, soit une vue matérialisée) - mais ne pense vraiment pas que cela en vaille la peine. Deux requêtes sont parfaitement bien - comme vous le dites, elles ont été indexées.

Vous pouvez utiliser un index sphinx (et donc une requête de recherche) - en créant un nouvel index combiné. Parce que vous dites que vos clés ne sont pas uniques, il faudrait créer une nouvelle clé synthétique.

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

Cela vous donne une fausse clé et un attribut pour identifier de quelle table provient le résultat. Vous pouvez l'utiliser pour obtenir la table d'origine d'où elle provient. (il y a bien d'autres façons de faire la même chose)

Cela vous permet d'exécuter une requête, peut obtenir des résultats combinés.

... MAIS pas convaincu que ce soit une bonne idée. Parce que si les résultats sont asymétriques, vous risquez de manquer des résultats. Disons qu'il y a 20 résultats correspondants d'une table et 10 d'une autre. Supposons que vous affichiez les 10 meilleurs résultats, maintenant à cause de la limite, les résultats du deuxième tableau pourraient bien être cachés sous le premier tableau (exemple extrême, en réalité, espérons-le, ils se sont mélangés). Deux requêtes séparées, vous permettent de garantir, d'obtenir CERTAINS résultats de chaque table.

... donc après tout ça. Restez avec ce que vous avez. C'est bon.