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

Тема в разделе "Базы данных", создана пользователем karen12, 10 дек 2015.

Модераторы: latteo
  1. karen12

    karen12 Постоялец

    Регистр.:
    26 фев 2012
    Сообщения:
    73
    Симпатии:
    1
    Есть у меня бд и таблицы
    PHP:
    CREATE TABLE IF NOT EXISTS `subdepart` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    id_departint(11NOT NULL,
      `
    subdepart_nametext NOT NULL,
      `
    depart_nameint(11NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;
    и
    PHP:
    CREATE TABLE IF NOT EXISTS `send` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    patient_idint(11NOT NULL,
      `
    subdepart_inint(11NOT NULL,
      `
    doctor_inint(11NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=202 ;
    Соотвественно в таблице send, в поле subdepart_in вставляется значение из таблицы subdepart (id),
    Делаю поиск по таблице send
    PHP:
    $subdepartn='9';
    SELECT (*)FROM   `sendWHERE   `send`.subdepart_in LIKE '%$subdepart%'  
    все работает нормально, но есть одна проблема, если в таблице subdepart есть данные с id от 1-ого до 20, выводится данные и у которого id=9 и id=19. То есть и 9 и 19 скрипт считает как 9, как исправить???
     
  2. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    У вас LIKE тоесть вы получаете все $subdepartn='9'; не 9 а всё где есть 9. так и должно быть. если вы этого не хотите используйте =
     
  3. karen12

    karen12 Постоялец

    Регистр.:
    26 фев 2012
    Сообщения:
    73
    Симпатии:
    1
    Дело в том что это отрывок кода, там есть еще несколько условий, я вставил LIKE , чтобы сделать выбор этого пункта необязательным, своего рода фильтр. если я поставлю = то выбор этого поля будет обязательным, чего мне не нужно, есть альтернативные пути решения этой задачи???
     
  4. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    Вы не поставили задачи))
     
  5. karen12

    karen12 Постоялец

    Регистр.:
    26 фев 2012
    Сообщения:
    73
    Симпатии:
    1
    :) задача такова- нужно вывести все данные у которых $subdepartn='9'. У меня вместе с $subdepart есть и выборка по промежутку времени, если я не отмечу значение subdepart, то выборка должна все равно произойти по промежутку времени. Надеюсь смог поставить задачу.:)
     
  6. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    а если
    $subdepartn='9';
    SELECT (*)FROM `send` WHERE `date_add` > '2015-12-12' ($subdepart ? AND `send`.subdepart_in LIKE '%$subdepart%' : '')
    Если я верно понял...
     
  7. karen12

    karen12 Постоялец

    Регистр.:
    26 фев 2012
    Сообщения:
    73
    Симпатии:
    1
    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 оставить пустым. Если сделать = то в таком случае выборка не произойдет.
     
  8. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    так ($subdepart ? AND `send`.subdepart_in LIKE '%$subdepart%' : '')
    это и поможет вам... тоесть если $subdepart есть то будет если нет то нет...
     
  9. karen12

    karen12 Постоялец

    Регистр.:
    26 фев 2012
    Сообщения:
    73
    Симпатии:
    1
    в таком виде вообше нечего не выводит
     
  10. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    Какая-то ошибка?
    Смысл этой конструкции понятен?
    $a = 1;
    $b = ($a ? 2 : 3);
    если $a = 1 то $b =2
    если $a = 0 или false или null то $b =3