Intereting Posts

как оптимизировать mysql-запрос, если у меня слишком много операторов OR в моем запросе?

используя 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, ...) 

http://www.w3schools.com/SQl/sql_in.asp

Если ваш список 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-запрос, если вы не знали эту функцию.