Задавайте вопросы, мы ответим
Вы не зашли.
есть таблица
===========================
id | name | start | end|
==================
1 | aaa |2009-10-01 | 2009-10-20|
и т.д.
бывает что start и end имеют одинаковые значения, бывает что разница месяц!...
нужно выбрать записи за сегодня ... тоесть где старт больше или равно , и ( или) енд ...
пробывал так SELECT * FROM table WHERE date >= '2009-10-01' AND end <= '2009-10-20'
Неактивен
Неактивен
спасибо большое
помогло
Неактивен
стоп
не могу
если указать вместо DATE именно дату, то работает
если использовать DATE('Y-n-d') не получается 0 записей
Неактивен
А что по вашему означает запись DATE('Y-n-d')? На мой взгляд (и сервер MySQL со мной согласен) это некорректный аргумент для функции DATE().
См. http://dev.mysql.com/doc/refman/5.0/en/ … tions.html
Не надо использовать ORDER BY RAND()
При выполнении этого запроса MySQL запишет во временную таблицу все строки исходной таблицы с новым полем, в котором будет содержаться результат выполнения функции RAND(). А потом будет сортировать в памяти эту таблицу по значениям добавочного поля.
P.S. Колонка все-таки называется `date` или `start`?
Неактивен
с датой разобрался .. написал CURDATE()
а как же мне выбрать случайную запись ?
P.S. есть разница?) date)
Неактивен
SandZ написал:
а как же мне выбрать случайную запись ?
Реализация средствами MySQL следующая:
Неактивен
спасибо , буду разбираться
Неактивен
LIMIT для выборки случайной записи мощное, но неэффективное по производительности решение. Можно реализовать более быстрый алгоритм, если предположить, что записи идут подряд или почти подряд по id.
1. SELECT MIN(id) min, MAX(id) max, COUNT(*) c FROM mytabl;
2. Вычисляем n = (max-min)/c, округляем вверх до целого
3. n - это характеристика прореженности таблицы, то есть если n=2, то примерно каждый второй id соответствует некой записи в таблице
4. Если n>50 используем метод, предложенный Васей в посте #7 (при больших n выборка по id не будет более эффективна, чем сортировка всего массива)
5. Генерируем n целых чисел i_n, min <= i_n <= max
6. Делаем выборку SELECT * FROM mytabl WHERE id in (i_1, i_2, .. i_n) ORDER BY RAND() LIMIT 1
7. Мы ожидаем, что в выборке будет одна запись. Если в выборке нет записей, возвращаемся к шагу 5.
Неактивен