Помогите с выводом данных

Какая-то ошибка?
Смысл этой конструкции понятен?
$a = 1;
$b = ($a ? 2 : 3);
если $a = 1 то $b =2
если $a = 0 или false или null то $b =3
решил проблеу--удалил из LIKE '%$subdepart%' первый знак %
 
PHP:
$date1 = trim($_REQUEST['date1']);
$date2 = trim($_REQUEST['date2']);
$adress_reg = trim($_REQUEST['adress_reg']);
$lgota = trim($_REQUEST["lgota"]);
$depart=$_REQUEST['depart'];
$subdepart_in=$_REQUEST['subdepart_in'];
$doctor_in=$_REQUEST['doctor_in'];



"SELECT COUNT(*) FROM   `send` WHERE  (`reception`.id = `send`.patient_id  ) AND (`reception`.date_inccome BETWEEN '$date1' AND '$date2')  AND  `send`.adress_reg LIKE '%$adress_reg%' AND `reception`.lgota LIKE '%$lgota%' AND `send`.depart_in LIKE '%$depart%'  AND `send`.subdepart_in LIKE '%$subdepart_in%'  AND `send`.doctor_in LIKE '%$doctor_in%'  "
вот мой код, в такой конструкции если я не отмечу например, $subdepart_in, то выборка произойдет по остальным критериям, но если я в $subdepart_in поставлю значение 9, то выводятся данные у которых subdepart_in =9 и 19, я понял, что это от того, что я использую оператор like, но мне нужно сделать так , чтобы я смог сделать выборку и в том случае если поле subdepart_in оставить пустым. Если сделать = то в таком случае выборка не произойдет.

Для просмотра ссылки Войди или Зарегистрируйся

Для просмотра ссылки Войди или Зарегистрируйся

Если уж совсем в тупую Для просмотра ссылки Войди или Зарегистрируйся (LENGTH)

Ключевая ошибка - вы пытаетесь использовать все данные независимо от того заполнены они или нет. Необходимо добавлять условия в запрос по мере поступления этих самых данных и для фильтрации использовать тот тип данных который соответствует полям БД, INT в вашем случае с равенством.

p.s. Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
:) задача такова- нужно вывести все данные у которых $subdepartn='9'. У меня вместе с $subdepart есть и выборка по промежутку времени, если я не отмечу значение subdepart, то выборка должна все равно произойти по промежутку времени. Надеюсь смог поставить задачу.:)


В вашем случае оператор LIKE категорически запрещен к использованию. Вы будете ловить косяки, не сейчас так потом, когда еще какое нибудь совпадение будет строковое. Это моветон строкой сравнивать точное цифровое значение в БД.
Что делать? Правильно подготавливать SQL запрос в PHP коде.
Вот алгоритм, свои поля и условия уж сделайте сами:

$query="SELECT fields FROM table WHERE 1";

if ( (isset($date1))and (isset($date2)) ) $sql.=" AND (`reception`.date_inccome BETWEEN '$date1' AND '$date2') ";
if ( isset($depart) ) $sql.=" AND `send`.depart_in = '$depart' ";

//проверяем
var_dump($query);
 
Назад
Сверху