Мне нужно выполнить свою функцию внутри такого запроса

$re = $bddp->prepare("SELECT * FROM `shop`, `hours` WHERE isOpen('`hours`.`day1`') = true";
$re->execute();

hours. day1 - это varchar с часами работы в понедельник, например "10: 00-14: 00".

Функция isOpen проверяет, открыто оно или нет, и возвращает true или false

Вопрос в том, кому я могу отправить hours.day1 как переменную в функцию isOpen в WHERE isOpen ('hours. day1') ?

Невозможно использовать PDO для подготовки или выполнения для этого?

-1
Miky 3 Авг 2017 в 08:34
В идеале ... вы должны хранить часы работы и закрытия, а также день в отдельных столбцах (это будет означать, что ваша таблица должна быть нормализована), тогда вы можете просто проверить, попадают ли указанное время и день в этот диапазон.
 – 
Terry
3 Авг 2017 в 08:38
Да, это лучшее решение, но во многих магазинах есть альтернативные часы, например "10: 00-14: 00 - 16: 00-20: 00 - 22: 00-00: 00".
 – 
Miky
3 Авг 2017 в 08:41
Для начала, является ли функция функцией PHP или функцией MySQL, определенной пользователем?
 – 
Magnus Eriksson
3 Авг 2017 в 08:44
Обновил мой ответ
 – 
Neodan
3 Авг 2017 в 08:49
1
Если это пользовательская функция MySQL, проверьте, как вы задаете значения. В настоящее время вы передаете буквальную строку hours.day1, поскольку она заключена в одинарные кавычки. Если вы удалите одинарные кавычки, это все равно неверно, поскольку затем он пытается передать столбец day1 из таблицы hours (попробуйте запятую вместо точки).
 – 
Magnus Eriksson
3 Авг 2017 в 08:50

1 ответ

Лучший ответ

В запросе SQL вы можете использовать только собственные функции MySQL, хранимые функции / процедуры и Пользовательские функции ( UDF).

Думаю, у вас не было бы проблем, если бы структура таблицы была правильной (время начала и окончания было в отдельных столбцах). Тогда вы сможете достичь своей цели только с несколькими условиями в части WHERE.

Если количество данных (количество строк) невелико, вы можете просто выбрать все строки и выполнить проверку на стороне PHP.

1
Neodan 3 Авг 2017 в 08:54
Ох ... правда, я забыл, спасибо. Я обновил свой ответ.
 – 
Neodan
3 Авг 2017 в 08:59
Да, это хорошее решение, но количество строк превышает 10 000. Я изменю структуру своей таблицы, как вы говорите.
 – 
Miky
3 Авг 2017 в 09:04