используя PHP и MySQL
Я захватил массив идентификаторов пользователей facebook из facebook.
Теперь я хочу найти соответствующее имя пользователя в своем приложении для этого массива.
Очевидно, что в моем приложении таблица пользователя содержит уникальные имена пользователей и уникальные значения fb_uid.
мое рудиментарное понимание программирования привело меня к двум путям:
1) используйте цикл и пройдите через массив fb_uid и найдите имя пользователя по одному.
ИЛИ
2) создайте запрос монстра, например select different (username) от пользователей, где fb_uid = value1 ИЛИ fb_uid = value2 …
так есть лучший выход?
Спасибо.
Вместо этого используйте оператор SQL SQL:
select distinct(username) from users where fb_uid in (value1, value2, ...)
Если ваш список fb_uids большой (скажем, более 100 или 500 r 1000 сотен идентификаторов) , я бы не пошел с «или» способом: слишком много »или« как это повредит БД, я думаю.
Но делать один запрос на один идентификатор тоже не очень хорошо …
Итак, как насчет сочетания этих двух идей? Выполнение одного запроса, например, 50 или 100 fb_uids?
И вместо использования лотов или OR вы можете пойти с IN; немного похоже на это:
select distinct(username) from users where fb_uid IN (id1, id2, id3, ...)
Не уверен, что это изменит что-нибудь для БД, но, по крайней мере, выглядит лучше ^^
Единственное, что вы не должны использовать слишком много идентификаторов в IN; поэтому, делая пару запросов, от 50 до 500 идентификаторов каждый раз может быть способ пойти.
И чтобы помочь вам немного дальше, вам может потребоваться взглянуть на array_slice
, чтобы извлечь «срезы» вашего массива fb_uids …
Есть еще одна функция MySQL: MATCH AGAINST
SELECT * FROM customer WHERE status = 1 AND MATCH (person, city, company, zipcode, tags) AGAINST ('".$searchstring."' IN BOOLEAN MODE)
Ваша строка ввода будет искать в разных столбцах.
Возможно, вы можете пересмотреть свой SQL-запрос, если вы не знали эту функцию.