За последние 24 часа нас посетили 17415 программистов и 1683 робота. Сейчас ищут 900 программистов ...

Прошу помочь с SQL выборкой

Тема в разделе "PHP для новичков", создана пользователем Johnboss, 5 сен 2017.

  1. Johnboss

    Johnboss Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    36
    Симпатии:
    0
    Всем привет!
    Написал выборку с MySQL таблицы.
    Должны выводиться значения больше $id2 и меньше $id1
    Но выводяться все id
    Где у меня ошибка в WHERE?
    Код (Text):
    1. $result = $sql->select([
    2.     'table' => 'shop_order',
    3.     'where' => [("id>$id1") AND ("id<$id2")],
    4.     'orderby' => ['id', 'desc']
    5. ]);
     
  2. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Так у вас в where логическая операция языка PHP, а не инструкция фильтрации для запроса.
    PHP:
    1. var_dump([("id>$id1") AND ("id<$id2")]);
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    замечательно...
     
  4. Johnboss

    Johnboss Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    36
    Симпатии:
    0
    Выдает ошибку array(1) { [0]=> bool(true) }
    Что это значит?
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Для начала где ты увидел вывод ошибок?
    PHP:
    1. array(1) { [0]=> bool(true) }
    это ? o_O
    Ты var_dump использовал чтобы вывести результат как дебаг при программировании.

    И второй случай
    это значит что ты получил булевое значение в [ массиве ]
    Не то что ты хотел - строковое представление
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Johnboss, откуда мы знаем, что за приблудой ты пользуешься для составления запросов. Это не стандартные PDO и mysqli, это какой-то сторонний построитель запросов. Читай его документацию.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Чтобы кота за хвост не тянуть:
    PHP:
    1. sprintf ( 'id NOT BETWEEN %d AND %d', $id1, $id2 )
     
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    dbffb135736abd5ed37a2fd87a19fcd4.jpg
    И чё не поулчается да? Как же так то. Бред, php компилятор не прав, так должно получатся! Пробуйте ещё раз. Уберите ещё ковычки они там явно лишние. Я думаю их уберёте и всё получится!
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    потому что не - поулчается
     
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    я так понял ты не понял :D
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Автор, попробуй руками запрос написать. Вот честно, телодвижений столько же, сколько с твоим билдером.
     
  12. Dilon

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

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    может лучше переписать вот это
    Код (Text):
    1. 'where' => [("id>$id1") AND ("id<$id2")],
    на вот это?
    Код (Text):
    1. 'where' => "id > $id1 AND id < $id2",
    Выше правильно сказали, нужно читать специфику вашего построителя.
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    УЧИМСЯ ЧИТАТЬ
    --- Добавлено ---
    и бутервин тут будет куда кстати
     
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Вот это вообще синтаксис откуда ?
    Чё это за язык такой ?
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну вообще, php. Другое дело, что чел не понимает, что на нём делает, а так булевы операции над строками вполне допустимы :)
     
  16. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mkramer хочешь сказать что в php в массив можно писать коверкая синтаксис написания мкассивов и php это съедает ? НУ расскажи мне. Я не про т очто там опирации. Я про то как он составил вообще это. То что у него банальная ошибка. Вас не корёжет что он не помечаая что это за тип данных пихает просто не понятно что в массив.
    PHP:
    1. 'where' => ?[? ????("id>$id1")????  ????AND ?????
    2. ????("id<$id2")???],
    --- Добавлено ---
    то есть он указывает что это массив.А внутрь ложит строку.... :D Не указывая что это строка! :D Тут ошибка синтаксиса! Добрый день!
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ты упрлс чтоли? Где там коверканье? :) Там выражение, результат которого и уйдет в массив.
    --- Добавлено ---
    ты сам-то понимаешь, что пишешь? Остап, остановись. Отдышись. Посмотри внимательнее.
    --- Добавлено ---
    Конструкция
    PHP:
    1. [("id>$id1") AND ("id<$id2")]
    Означает:
    1) Создай строку "id>$id1", подменив $id1 на значение одноименной переменной;
    2) Создай строку "id<$id2", подменив $id2 на значение одноименной переменной;
    3) Проведи между этими строками логическую операцию AND;
    4) Положи результат этой операции в ячейку массива.