2009-05-03 2 views
0

Ich habe ein Array von Benutzer-IDs in einer Abfrage von Datenbank A, Tabelle A (AA).Vorschläge zum Abrufen von verwandten Daten über Datenbanken mit unterschiedlichen Logins?

Ich habe die Hauptbenutzerdatenbank in Datenbank B, Tabelle A (BA).

Für jede Benutzer-ID, die in meinem Ergebnis-Array von AA zurückgegeben wird, möchte ich den Vor- und Nachnamen dieser Benutzer-ID aus BA abrufen.

Verschiedene Benutzerkonten steuern jede Datenbank. Leider kann jede Anmeldung keine Berechtigungen für jede Datenbank haben.

Frage: Wie kann ich die ersten und letzten Anfragen mit der geringsten Anzahl an Abfragen und/oder Verarbeitungszeit abrufen? Mit 20 Benutzern im Array? Mit 20.000 Benutzern im Array? Jede Größenordnung höher, wenn anwendbar?

mit PHP 5/MySQL 5.

+0

Es gibt nicht einmal die _Possibility_ für ein anderes db-Konto, das Zugriff auf z. eine Ansicht, die beide Tabellen kombiniert? – VolkerK

Antwort

2

Solange die Datenbanken auf dem gleichen Server sind nur eine Quer Datenbank verwenden. Die DB-Anmeldung, die für den Zugriff auf die Daten verwendet wird, benötigt ebenfalls Berechtigungen für beide Datenbanken. Etwas wie:

SELECT AA.userID, BA.first, BA.last 
FROM databasename.schema.table AA 
INNER JOIN databasename.schema.table BA ON AA.userID = BA.userID 

In Reaktion auf die Kommentare:

Ich glaube nicht, dass ich den Teil über mehrere Logins richtig gelesen, sorry. Sie können nicht zwei verschiedene mySQL-Logins für eine Verbindung verwenden. Wenn Sie mehrere Abfragen ausführen müssen, haben Sie wirklich nur drei Optionen. A) Durchlaufen Sie die erste Ergebnismenge und führen Sie mehrere Abfragen aus. B) Führen Sie eine Abfrage aus, die eine WHERE-Klausel mit der Benutzer-ID IN (@firstResultSet) verwendet und übergeben Sie die erste Ergebnismenge. C) Wählen Sie alles aus der zweiten DB und verbinden Sie sie in Code.

Alle drei dieser Optionen sind nicht sehr gut, also würde ich fragen, warum können Sie nicht Benutzerberechtigungen für eine der beiden DBs ändern? Ich würde auch fragen, warum sollten Sie die Namen und IDs von 20.000 Benutzern auswählen? Sofern es sich nicht um eine Art von Datenabbild handelt, würde ich nach einer anderen Möglichkeit suchen, die Daten anzuzeigen, die sowohl einfacher zu verwenden als auch weniger abfrageintensiv sind.

Alles, was gesagt wird, welche Option Sie wählen, wird auf einer Vielzahl von verschiedenen Umständen basieren. Bei einer geringen Anzahl von Datensätzen unter 1.000 würde ich Option B verwenden. Bei einer höheren Anzahl von Datensätzen würde ich wahrscheinlich die Optionen C verwenden und versuchen, die beiden Ergebnismengen in etwas zu platzieren, das verknüpft werden kann (z. B. array_combine).

+0

Leider kann jede Anmeldung keine Berechtigungen für jede Datenbank haben. :( – Ian

+0

Aber Sie können zwei Verbindungen haben, eine zu jeder Datenbank (mit zwei Logins, jeweils eine), und der Zugang kann ihnen noch beitreten. – dkretz

+0

Wie würde ich das in PHP tun? Ich habe zwei Handles bereit zu verwenden, $ db_A und $ db_B wo würde ich sie in mysql_query() setzen? – Ian

0

Ich denke, sie Schlüssel hier ist, dass es in zwei Datenbankaufrufen möglich sein sollte.

Ihre erste die IDs von Datenbank A und die zweite zu bekommen, um sie zu Datenbank B. passieren

Ich weiß nicht, mysql, aber in Sqlserver würde ich den XML-Datentyp verwenden, und übergeben Sie alle die IDs in eine Anweisung mit diesem. Vor dem XML-Datentyp hätte ich etwas dynamisches SQL mit den IDs in einer IN-Anweisung aufgebaut.

SELECT UserId VON DatabaseA.TableA

Schleife durch ids und bauen eine durch Komma getrennte Zeichenfolge auf.

„SELECT Vorname, Nachname FROM DataBaseB.TableA userid IN (“ + stringID + „)“

Das Problem dabei, dass Sie wth 20.000 ids ist, kann mit der Menge der Daten einige Performance-Probleme haben Sie Senden.An dieser Stelle würde ich den XML-Datentyp verwenden, also schaue vielleicht nach, welche Alternativen mysql für die Weitergabe von Listen von IDs hat.

Verwandte Themen