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_id
s ”.
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?