MySQL между 2 раз (а) - PullRequest
       4

MySQL между 2 раз (а)

1 голос
/ 09 сентября 2011

Я просматривал форум и обнаружил, что сообщения похожи, но не работают для меня, так что вот так.

Я пробую 2 вещи, во-первых: я создал флажок, который при выборе будет показывать результаты открытия магазинов. shop_open и shop_close - мои используемые столбцы, которые имеют тип данных time (например, 07:00:00). Когда пользователь выбирает и отправляет форму с установленным флажком, я хочу, чтобы что-то вроде CURTIME() проверяло только текущее время, часы и минуты, а затем проверяло, находится ли текущий час: минута между значениями shop_open и shop_close , в котором должны отображаться магазины, открытые в указанное время.

Второй вариант состоял в том, чтобы иметь 2 поля ввода для ввода времени открытия и / или закрытия, чтобы увидеть, совпадают ли данные, как указано выше. Первый вариант звучит для меня лучше, если возиться с двумя вариантами, это приведет к шагам назад.

Вот мой запрос:

"SELECT shops.*, services.*, ratings.*, temp.total as final_total, CONCAT(shop_number, ' ', shop_location, ' ', shop_city, ' ', shop_province, ' ', shop_postcode) AS address FROM shops 
 inner join services on shops.shop_id=services.shop_id
 inner join ratings on shops.shop_id=ratings.shop_id
 inner join (select SUM(comfort + service + ambience + friendliness + spacious + experience )/(6) / COUNT(shop_id) AS total, shop_id FROM ratings GROUP BY shop_id ) as temp on shops.shop_id=temp.shop_id HAVING temp.total >= '$search_total_rating'
 AND CURTIME() BETWEEN shop_open AND shop_close
 AND address LIKE '%$search_shop_address%' AND shop_name LIKE '%$search_shop_name%' ORDER BY shop_name ASC

Я знаю, что это сложный и запутанный запрос, но он прекрасно работает без этой проблемы. Код, который вы предложили, я уже использовал, но в других обстоятельствах из-за моего запутанного сложного запроса, я думаю, я поставил его не в том месте: s

Я не собираюсь использовать '$ search_open_now' МЕЖДУ shop_open И shop_close вместо получения текущего времени и возвращает неправильные результаты: (

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Что-то вроде этого будет делать то, что я думаю, что вы хотите:

SELECT * FROM yourtable WHERE CURTIME() BETWEEN shop_open AND shop_close;
2 голосов
/ 09 сентября 2011
SELECT field_names FROM table_name WHERE CONCAT(DATE_FORMAT(NOW(), '%H:%i'), ':00') BETWEEN shop_open AND shop_close

Следует игнорировать секунды для вас.


Обновление: мне кажется, что-то вроде этого работает, перемещая WHERE перед предложением HAVING

SELECT shops.*, services.*, ratings.*, temp.total as final_total, CONCAT(shop_number, ' ', shop_location, ' ', shop_city, ' ', shop_province, ' ', shop_postcode) AS address FROM shops 
inner join services on shops.shop_id=services.shop_id
inner join ratings on shops.shop_id=ratings.shop_id
inner join (select SUM(comfort + service + ambience + friendliness + spacious + experience )/(6) / COUNT(shop_id) AS total, shop_id FROM ratings GROUP BY shop_id ) as temp on shops.shop_id=temp.shop_id
WHERE CONCAT(DATE_FORMAT(NOW(), '%H:%i'), ':00') BETWEEN shop_open AND shop_close
HAVING temp.total >= '$search_total_rating'
AND address LIKE '%$search_shop_address%' AND shop_name LIKE '%$search_shop_name%' ORDER BY shop_name ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...