Вейдер
Новичок
Добрый день. Помогите в моей проблеме.
Делаю запрос к базе для вывода названий организаций с возможностью поиска и фильтра по городам:
// Выражение Select
$select = 'SELECT uk.id_uk, uk.code_uk, uk.name_uk, gorod.name_gorod, uk.address_uk, uk.inn_uk, uk.director_uk';
$from = ' FROM uk, gorod';
$where = ' WHERE (uk.id_gorod = gorod.id_gorod)';
$placeholders = array();
// Список выбранных городов в фильтре
if(isset($_POST['gorod']) && is_array($_POST['gorod'])) {
$where .= ' AND (uk.id_gorod IN ( :filter_gorod ))';
$placeholders[':filter_gorod'] = implode(',', $_POST['gorod']);
}
// Если была указана строка для поиска
if ($_POST['WhatFind'] != '') {
$where .= ' AND ((uk.name_uk LIKE :search) OR (uk.code_uk LIKE :search))';
$placeholders[':search'] = '%' . $_POST['WhatFind'] . '%';
}
$sql = $select . $from . $where;
$s = $pdo->prepare($sql);
$s->execute($placeholders);
Так вот, select без поиска и фильтра работает нормально. Поиск тоже. А вот фильтр работает не так как надо: если выбран два и более городов, то выдаются результаты только по первому городу, остальные, почему-то, игнорятся. Например: выбираю 3 города.
print_r($_POST['gorod']) выдает Array ( [1] => 3 [2] => 2 [3] => 1 ) все нормально.
print_r($placeholders) выдает Array ( [:filter_gorod] => 3,2,1 ) вроде тоже все нормально, но выводятся организации только для первого города, в данном случае для id=3. Почему так происходит?
P.S. причем, если подставляю id городов напрямую в выражение $where .= ' AND (uk.id_gorod IN ( 3,2,1 ))'; то все работает как надо, выдаются результаты по всем трем городам
Делаю запрос к базе для вывода названий организаций с возможностью поиска и фильтра по городам:
// Выражение Select
$select = 'SELECT uk.id_uk, uk.code_uk, uk.name_uk, gorod.name_gorod, uk.address_uk, uk.inn_uk, uk.director_uk';
$from = ' FROM uk, gorod';
$where = ' WHERE (uk.id_gorod = gorod.id_gorod)';
$placeholders = array();
// Список выбранных городов в фильтре
if(isset($_POST['gorod']) && is_array($_POST['gorod'])) {
$where .= ' AND (uk.id_gorod IN ( :filter_gorod ))';
$placeholders[':filter_gorod'] = implode(',', $_POST['gorod']);
}
// Если была указана строка для поиска
if ($_POST['WhatFind'] != '') {
$where .= ' AND ((uk.name_uk LIKE :search) OR (uk.code_uk LIKE :search))';
$placeholders[':search'] = '%' . $_POST['WhatFind'] . '%';
}
$sql = $select . $from . $where;
$s = $pdo->prepare($sql);
$s->execute($placeholders);
Так вот, select без поиска и фильтра работает нормально. Поиск тоже. А вот фильтр работает не так как надо: если выбран два и более городов, то выдаются результаты только по первому городу, остальные, почему-то, игнорятся. Например: выбираю 3 города.
print_r($_POST['gorod']) выдает Array ( [1] => 3 [2] => 2 [3] => 1 ) все нормально.
print_r($placeholders) выдает Array ( [:filter_gorod] => 3,2,1 ) вроде тоже все нормально, но выводятся организации только для первого города, в данном случае для id=3. Почему так происходит?
P.S. причем, если подставляю id городов напрямую в выражение $where .= ' AND (uk.id_gorod IN ( 3,2,1 ))'; то все работает как надо, выдаются результаты по всем трем городам
Последнее редактирование: