За последние 24 часа нас посетил 96841 программист и 5619 роботов. Сейчас ищут 2160 программистов ...

Sql запрос , left join

Тема в разделе "PHP для новичков", создана пользователем Alex71, 14 дек 2016.

  1. Alex71

    Alex71 Новичок

    С нами с:
    14 дек 2016
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте, возник следующий вопрос, на который я пока не могу найти ответ в связи с малым опыт работы с базой данных.

    Есть следующего вида таблицы

    a_content

    ID | MARKA | MODEL | OIL | COLOR | TOWN | COST

    a_content_cat

    ID | CONTENT_ID | NUMBER

    И есть форма

    marka - чекбокс - выбирает id марки автомобилей
    model - чекбокс - выбирает id модели марок автомобиля
    oil - чекбокс - выбирает типы топлива
    color - чекбокс - выбирает цвета
    town - select - id города
    cost - цена (2 input - costmin, costmax)
    и number[] - чекбокс- выбирает опции автомобиля, новое, подержанное, кредит


    после нажатия submit , я отправляю форму, и обрабатываю ее следующим образом

    if(!empty($_GET['costmin']) || !empty($_GET['costmax'])){
    $users_sql[]="`cost`>{$costmin} AND `cost` < {$costmax}";
    }
    if(!empty($_GET['marka'])){
    $marka = implode(",", $_GET['marka']);
    $users_sql[]="`marka` in ({$marka})";
    }
    if(!empty($_GET['color'])){
    $color = implode(",", $_GET['color']);
    $users_sql[]="`color` in ({$color})";
    }
    if(!empty($_GET['model'])){
    $model = implode(",", $_GET['model']);
    $users_sql[]="`model` in ({$model})";
    }
    if(!empty($_GET['town'])){
    $users_sql[]="`town`={$_GET['town']}";
    }
    if(!empty($_GET['oil'])){
    $oil = implode(",", $_GET['oil']);
    $users_sql[]="`oil` in ({$oil})";
    }
    if (sizeof($users_sql))
    {
    $users_sql = " ".implode(' AND', $users_sql);
    }

    $result = mysqli_query("SELECT * FROM a_content WHERE `id` > '1' AND {$users_sql} ");

    Проблема - 1 , ищет все по отдельности, если я выберу opel - astra - benzin
    выведет все opel, все astra, все benzin
    Проблема - 2, не могу сюда же добавить вторую таблицу( в один запрос) чтобы сверить еще и опции по number = number
    --- Добавлено ---
    пробовал UNION но там вроде как, должны совпадать количество rows
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    жесть...
    • оформи код правильно
    • перед запросом в БД, пропиши строку echo "SQL запрос"; и выпиши сюда
    • `id` > '1' что это делает? Для чего?
     
  3. Alex71

    Alex71 Новичок

    С нами с:
    14 дек 2016
    Сообщения:
    3
    Симпатии:
    0
    пробовал UNION но там вроде как, должны совпадать количество rows, а
    а что вы имеете ввиду?
     
  4. Alex71

    Alex71 Новичок

    С нами с:
    14 дек 2016
    Сообщения:
    3
    Симпатии:
    0
    ладно, задам вопрос более точнее, как мне использовать в запросе несколько IN , пример
    ....
    WHERE
    `ac`.`marka` in ({$marka}) , `ac`.`model` in ({$model}), ... и т.д?
     
  5. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    вроде ставите and и еще условие, не так?

    WHERE
    `ac`.`marka` in ({$marka}) , `ac`.`model` in ({$model}) AND WHERE .. .. . IN ..
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    Код (Text):
    1. SELECT t1.*, t2.id AS id_two
    2. FROM table1 t1
    3. LEFT JOIN table2 t2 ON t2.number = t1.number
    4. WHERE ...