Например нужно выбрать 2-х пользователей из России, Украины или Польши и 7 пользователей из других стран которые зарегистрировались вчера. Запрос будет такой:
(SELECT username FROM users WHERE country IN ('RU','UA','PL') AND regdt = DATE_SUB(CURDATE(), INTERVAL 1 DAY) ORDER BY RAND() LIMIT 2) UNION (SELECT username FROM users WHERE country NOT IN ('RU','UA','PL') AND regdt = DATE_SUB(CURDATE(), INTERVAL 1 DAY) ORDER BY RAND() LIMIT 7)
В примере 3 первых элемента.
$arr=array_slice($arr,0,2);
Формируется массив, каждый элемент которого отдельная строка.
$arr=preg_split("/[\n\r]+/s",$text);
Целое число дней между сегодняшней датой и любой другой:
floor((strtotime("now")-strtotime("2010-01-20"))/86400)
Как пример получаем записи, дата которых старше 30 дней, тип поля fieldname — DATE:
SELECT * FROM tablename WHERE fieldname < (NOW() - INTERVAL 30 DAY)
Вариант 1. Дату получаем на PHP:
Вариант 1.1.
$time=mktime(date('H'),date('i'),date('s'),date('m'),date('d')-1,date('Y'));
$yd=date("Y-m-d",$time);
Вариант 1.2.
$yd=date("Y-m-d",time()-3600*24);
Вариант 1.3.
$yd=date('Y-m-d',strtotime('yesterday'));
Вариант 1.4.
$yd=date('Y-m-d',strtotime('-1 day'));
из всех этих вариантов последний наверное самый нормальный.
Ну и сама выборка
$query=mysql_query("SELECT fieldname FROM tablename WHERE datefield='".$yd."'");
И вариант 2. где только sql-запрос. Самый правильный в данном случае.
$query=mysql_query("SELECT fieldname FROM tablename WHERE datefield = DATE_SUB(CURDATE(), INTERVAL 1 DAY)");