Liczba pozycji MySQL w „klauzuli”

Mam trzy tabele do definiowania użytkowników:

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)

Chcę utworzyć użytkownika warstwy pośredniej, który ma pewien dostęp do innych użytkowników w aplikacji. Aby określić, którzy użytkownicy zalogowani mogą uzyskać dostęp, używam podzapytania, takiego jak poniżej:

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')

Obecnie przechowuję ciąg podzapytań w zmiennej, a następnie dynamicznie wstawiając go do zewnętrznego zapytania za każdym razem, gdy muszę pobrać listę użytkowników. Po zrobieniu tego pomyślałem: „musi być lepiej przechowywać ciąg rzeczywistychuser_ids ”.

Więc zamiast przechowywać to w zmiennej ...

$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";

... Właściwie wykonuję zapytanie i przechowuję wynik w ten sposób ...

$subSql = "12, 56, 89, 100, 1234, 890";

Wtedy, gdy muszę wyciągnąć lampkę użytkowników, do których zalogowany użytkownik ma dostęp, mogę to zrobić za pomocą:

$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";

I wreszcie pytania:

Ile przedmiotów możesz użyć w MySQLIN KLAUZULA? Przechowywanie rzeczywistych identyfikatorów zamiast instrukcji sub-sql musi być szybsze do wykonania tego zapytania zewnętrznego za każdym razem, prawda?

questionAnswers(4)

yourAnswerToTheQuestion