не знаю как правильно по уму реализовать!? может кто сталкивался? задача выбрать людей в заданном диапазоне возраста (от и до), в базе есть дата рождения человека... высчитать из даты рождения возраст я могу, а потом в запросе указать, если к примеру задано от 25 до 40, то найти всех где (возраст человека >25 and возраст человека < 40)... только у меня загвоздка, высчитать в запросе сколько лет каждому я могу только после do {, в цикле... а задать значение (возраст человека >25 and возраст человека < 40) нужно выше в запросе..!?) я придумал решение, но оно помоему не по уму... при регистрации сразу переводить ДР в возраст и заносить в базу, а потом уже указывать в запросе... да и если человек "постареет", то в критерий уже не попадет..))
Код (Text): Внутри SQL запроса WHERE age>25 AND age<40 Как вариант Добавлено спустя 1 минуту 11 секунд: или тупо через иф елсе прогнать
имхо. так нельзя делать. ведь каждый год вам будет нужно +1 делать) лучше ДР вычислять отдельно, а в запросе(как указано выше) уже выборку делать.
я так же и писал, но как в SQL запрос добавить WHERE age>25 AND age<40, если age высчитывается ниже чем сам запрос, в цикле do???? $result5 = mysql_query("SELECT anketa.*,foto_user.id_user,activ,users.avatar,bd_day,bd_month,bd_year,visiting_m,visiting_d,visiting_y,visiting_time,nik,city FROM anketa, foto_user, users WHERE users.id = anketa.id_user and ($lf_S) $city_S $albom_foto GROUP BY anketa.id ORDER BY id DESC LIMIT $start, $num",$db); if (mysql_num_rows($result5) > 0) { $myrow5 = mysql_fetch_array($result5); do { ...тут будем считать $age ????????????????
do while? Добавлено спустя 2 минуты 2 секунды: Я понял это только когда уже отправил, и поэтому предложил иф. а если по году рождения и нау вычислить?
А я как раз хотел ссылочку дать на мой топик, где игордата мне открыл глаза. http://www.php.ru/forum/viewtopic.php?f=9&t=41164 хоия я do while в if запихивал, тогда он работает также как while!?
В Do...while условие стоит в конце цикла. Поэтому он тупо сначала что-то сделает. А потом только поинтересуется, не пустой ли ответ из бд пришел. Естественно что посыплются ошибки обращения к несуществующим переменным. Соотв, юзайте просто while и усё будет в ажуре.
Я понимаю что Попов сатана и чт о Do...while не подходит для работы с бд... ) я пока не умею по другому... можно вообще по существу заданного вопроса!?)
Вообще, вместо вот этих трёх полей bd_day,bd_month,bd_year лучше было бы сделать одно поле типа DATE. В MySQL есть встроенные средства для работы с датами. Тем не менее, если уже написан сайт и куча разных скриптов использует именно такой тип хранения даты - то выискивать и переписывать все эти места, наверно, будет влом... Хотя я бы просто добавил в эту таблицу ещё одно поле с датой (последним столбцом) и одним несложным UPDATE-запросом внёс в него данные на основе имеющихся в таблице. Могу предложить такой SQL-запрос, который выберет всех юзеров с заданным возрастом (в пример выберет пользователей с возрастом от 25 до 40 лет включительно): Код (Text): SELECT (YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age` FROM `testdates` HAVING `age` >= 25 AND `age` <= 40; Естественно, можно добавить в него другие нужные в выборке поля. Но вместо этих извращений с CONCAT() лучше бы всё же хранить в MySQL дату в виде даты, а не просто цифр
Попробуй так. Не проверял $result5 = mysql_query("SELECT anketa.*, foto_user.id_user, activ, users.avatar, bd_day, bd_month, bd_year, visiting_m, visiting_d, visiting_y, visiting_time, nik, city, (YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age` FROM anketa, foto_user, users WHERE users.id = anketa.id_user and ($lf_S) $city_S $albom_foto GROUP BY anketa.id HAVING `age` >= 25 AND `age` <= 40 ORDER BY id DESC LIMIT $start, $num",$db);