benim sorguda çok OR operatörleri varsa mysql sorgu optimize etmek nasıl?

3 Cevap php

PHP ve MySQL kullanarak

i facebook facebook kullanıcı kimlikleri bir dizi yakaladı.

Şimdi ben bu dizi için benim uygulamada gelen adını bulmak istiyorum.

Açıkçası benim uygulamada kullanıcı tablo benzersiz bir kullanıcı adı ve benzersiz fb_uid değerlerini içerir.

Benim ilkel anlayış oof programlama 2 yollardan götürdü:

1) Bir döngü ve fb_uid dizisi aracılığıyla çalıştırmak ve kullanıcı adını tek tek bulabilirsiniz.

VEYA

2) create a monster query like select distinct(username) from users where fb_uid = value1 VEYA fb_uid = value2 ...

bu yüzden dışarı daha iyi bir yolu var mı?

Teşekkür ederim.

3 Cevap

Kullanım SQL en IN operatörü yerine:

select distinct(username) from users where fb_uid in (value1, value2, ...)

http://www.w3schools.com/SQl/sql%5Fin.asp

Fb_uids listeniz büyük ise (say, more than 100 or 500 r 1000 hundred ids), I "veya" yolu ile gitmek olmaz: çok fazla "ya da" böyle DB zarar edecek, ben düşünüyorum.

Ama id başına bir sorgu yapıyor ya da gerçekten iyi değil ...


So what about a mix of those two ideas ? Doing one query per, say, 50 or 100 fb_uids ?

Ve, bunun yerine çok sayıda ya da OR kullanarak, sen IN ile gidebilirsiniz; Bu gibi biraz:

select distinct(username) from users where fb_uid IN (id1, id2, id3, ...)

Bu DB için bir şey değişmez, ama olacak emin değilim, en azından, bu ^ ^ daha iyi bakıyor

Sadece şey IN çok kimlikleri kullanmak gerektiğidir; bu yüzden, her zaman 50 ile 500 kimlikleri ile, sorgularının birkaç yapıyor gitmek için bir yol olabilir.


And to help you a bit further, you might need to take a look at array_slice, to extracts "slices" of your fb_uids array...

There's another MySQL function: MATCH AGAINST

SELECT * FROM customer WHERE status = 1 AND MATCH (person, city, company, zipcode, tags) AGAINST ('".$searchstring."' IN BOOLEAN MODE)

Sizin inputString farklı sütunlarda aranacaktır.

Bu işlevi biliyordum olmasaydı belki sizin sql deyimi yeniden olabilir.