Я ищу что-то вроде человека здесь искал, только хотел бы использовать MySQL. Приведенную ниже таблицу можно найти в моей базе данных (упрощенно).
+------+------+------+------+
| id | name | first| last |
+------+------+------+------+
| 1 | John | 1020 | 0814 |
| 2 | Ram | 0827 | 0420 |
| 3 | Jack | 0506 | 0120 |
| 4 | Jill | 0405 | 0220 |
| 5 | Zara | 1201 | 1219 |
+------+------+------+------+
Прежде всего, запись должна быть случайной, а не с идентификатором 4, и мне нужна только одна запись. Я понял это: SELECT * FROM test WHERE id <> 4 ORDER BY rand() LIMIT 1
.
В этой таблице столбцы «первый» и «последний» представляют собой даты в формате ммдд (оба числа целые). Так что Джон свободен большую часть года; с 20 октября по 14 августа. Zara, с другой стороны, доступна только в течение небольшого периода времени; с 1 по 19 декабря.
Мой вопрос: как мне изменить свой запрос, чтобы выбрать только доступных людей? Я не могу использовать «между», так как в случае Джона между 10:20 и 08:14 нет ничего.
Я просто не могу понять, должны быть другие люди, у которых есть похожая проблема... У кого-нибудь есть решение?
С уважением
first
иlast
хранятся как целые числа, а не как даты? Почему некоторые первые значения идут после последних значений? В таком случае, как узнать, что нужно искать сначала › последним или последним › первым? Я также предполагаю, что вы имели в виду 20 октября. - person Andy G   schedule 18.08.2013BETWEEN
, если сначала преобразуете свои «даты» в фактические значения MySQLDATE
. Вы можете сделать это с помощьюSTR_TO_DATE()
:STR_TO_DATE(first, '%m%d')
. Однако проблема, которую отмечает @AndyG, остается. - person Tomas Creemers   schedule 18.08.2013