Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es eine bessere Möglichkeit, mit Sphinx/MySQL Daten aus zwei Tabellen gleichzeitig abzurufen?

Sie können nicht wirklich davonkommen, keine zwei MySQL-Abfragen zu haben. Nun, Sie könnten, indem Sie sie entweder einfach zu einem kombinieren, mit UNION. Oder indem Sie eine neue kombinierte "Tabelle" erstellen (entweder eine Ansicht oder eine materialisierte Ansicht) - aber denken Sie wirklich nicht, dass es den Aufwand wert ist. Zwei Abfragen sind vollkommen in Ordnung - wie Sie sagen, wurden sie indiziert.

Sie könnten einen Sphinx-Index (und damit eine Suchabfrage) verwenden, indem Sie einen neuen kombinierten Index erstellen. Da Sie sagen, dass Ihre Schlüssel nicht eindeutig sind, müssten Sie einen neuen synthetischen Schlüssel erstellen.

zB...

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

Dadurch erhalten Sie einen gefälschten Schlüssel und ein Attribut, um zu identifizieren, aus welcher Tabelle das Ergebnis stammt. Sie können dies verwenden, um die ursprüngliche Tabelle zu erhalten, aus der sie stammt. (es gibt viele andere Möglichkeiten, dasselbe zu tun)

Auf diese Weise können Sie eine Abfrage ausführen und kombinierte Ergebnisse erhalten.

... ABER nicht davon überzeugt, dass es eine gute Idee ist. Denn wenn die Ergebnisse asymmetrisch sind, können Sie Ergebnisse verpassen. Angenommen, es gibt 20 übereinstimmende Ergebnisse aus einer Tabelle und 10 aus einer anderen. Angenommen, Sie zeigen die Top-10-Ergebnisse, jetzt könnten die Ergebnisse aus der zweiten Tabelle aufgrund des Limits gut unter der ersten Tabelle versteckt sein (extremes Beispiel, in Wirklichkeit vermischen sie sich hoffentlich). Mit zwei separaten Abfragen können Sie garantieren, dass Sie EINIGE Ergebnisse aus jeder Tabelle erhalten.

... also nach all dem. Bleib bei dem, was du hast. Das ist gut.