оптимизация запросов MySQL для zip-массивов - PullRequest
0 голосов
/ 14 декабря 2011

Все, я ищу почтовый индекс и затем нахожу все другие почтовые индексы в данном радиусе.Я пытаюсь сделать один вызов к базе данных, так какой тип запроса я должен использовать?Я думал об использовании предложения OR, но мне было интересно, есть ли у кого-нибудь лучшие идеи по оптимизации запросов для этого?Я думал о том, чтобы сделать что-то подобное, но любой совет будет оценен.Спасибо

$zipArray = $zipLoc->inradius($_SESSION['pav_event_zip_code'],50);
$total_zips = count($zipArray);
$sql = "Select * from vendor where vendor_zip='$zipArray[0]'";
for($i=1;$i<$total_zips;$i++){
    $sql. = "OR vendor_zip='$zipArray[$i]'";
}

1 Ответ

1 голос
/ 14 декабря 2011

Вы можете использовать оператор IN, хотя он не будет быстрее, его гораздо проще читать:

$zipArray = $zipLoc->inradius($_SESSION['pav_event_zip_code'],50);
$zipArray[] = -1; // make sure the IN Statement does not fail
$sql = 'SELECT * FROM vendor WHERE vendor_zip IN ('.implode(',',$zipArray).')';

Убедитесь, что у вас есть индексированный столбец vendor_zip

...