Ich habe drei Tabellen Benutzer zu definieren:MySQL Anzahl der Elemente innerhalb der „in-Klausel“
USER: user_id (int), username (varchar)
USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)
USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)
Ich möchte eine mittlere Ebene Benutzer erstellen, die bestimmte Zugriff auf andere Benutzer innerhalb der Anwendung hat. welche Benutzer die im Gebrauch angemeldet, um zu bestimmen zugreifen können, ich bin mit einer Unterabfrage wie folgt aus:
SELECT user_id FROM user WHERE user_id
IN (SELECT user_id
FROM user_metadata
WHERE user_metadata_field_id = 1 AND field_value = 'foo')
Derzeit ich die Unterabfrage-String in einer Variablen bin zu speichern und dann dynamisch in die äußere Abfrage Einfügen jedes Mal, wenn ich brauche um eine Liste von Benutzern zu ziehen. Nachdem ich das getan hatte, dachte ich: "Es muss besser sein, nur eine Zeichenfolge des tatsächlichen user_id
s zu speichern".
Also anstatt zu speichern diese in einer Variablen ...
$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";
... Ich führe die Abfrage tatsächlich und das Ergebnis wie folgt aus ...
$subSql = "12, 56, 89, 100, 1234, 890";
Dann, wenn ich brauche eine beleuchtete von Benutzern zu ziehen, dass die angemeldeten Benutzer hat Zugriff auf, kann ich so mit:
$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";
Und schließlich die Fragen:
Wie viele Artikel können Sie in einem MySQL IN
CLAUSE verwenden? Speichern der tatsächlichen IDs anstelle der Sub-SQL-Anweisung muss schneller für die Durchführung dieser äußeren Abfrage jedes Mal sein, nicht wahr?
Hey Quassnoi: Es scheint eine Menge Uneinigkeit über Ihre Leistungstests und Ihre Behauptung, dass eine temporäre Tabelle besser ist. Ich denke du magst hier falsch liegen. – IcedDante
@IcedDante: Es gibt Skripte, um alles zu reproduzieren, worüber ich im Blogpost geschrieben habe. Sie können Ihren eigenen Blogpost mit Ihren eigenen Skripten schreiben und mir zeigen, wie falsch ich bin. Ansonsten sind Gespräche wie diese nur heiße Luft. – Quassnoi
Ich weiß, dass diese Frage alt ist, aber Ihre Antwort hat die echte Frage nicht beantwortet: "Wie viele Artikel können Sie in einer MySQL IN CLAUSE verwenden?" – Gusman