Доброго времени суток. Встретился с интересной задачкой, сообразить решение которой пока не могу. Есть четыре ссылки в блоке - поиск по возрасту: 1. <a href='age.php?age=1'>Поиск до 1 года</a>; 2. <a href='age.php?age=2'>Поиск от 1 года до 3-х лет</a>; 3. <a href='age.php?age=3'>Поиск от 3 лет до 6</a>; 4. <a href='age.php?age=4'>Поиск от 6 лет и выше</a>; Причем в age=1,age=2,age=3,age=4 - 1,2,3 и 4 вытаскиваются динамически из базы данных. Другими словами из БД вытаскиваются все поля, где age соответствует одному из значений 1,2,3 или 4. Все работает как нужно и "товар" вытаскивается для того возраста, для которого он предназначается (в зависимости от поля age). Но вся проблема состоит в том, что "товар" может быть рассчитан для возраста от 2 лет и старше (подходит для age = 2, 3 и 4) или до 3-х лет (age=1 и age=2). Как сделать грамотный поиск по возрасту, чтобы из бызы вытаскивались все товары, которые удовлетворяют ссылке?
PHP: <?php $age = isset($_GET['age'])?(int)$_GET['age']:0; if($age >= 1 && $age <=4) { $query = null; if($age == 1) $query = "`age` < 1"; elseif($age == 2) $query = "`age` IN (1,2,3)"; elseif($age == 3) $query = "`age` IN (4,5,6)"; elseif($age == 4) $query = "`age` > 6"; $temp = mysql_query("SELECT FROM `table` WHERE ".$query); } значения уже сам подправишь
как вариант, хранить возраст в виде плавающего числа от 2-х лет - 2.01 от 1-го года - 1.01 до 3-х лет - 2.99 запрос от 1 года до 3 был бы age > 1 and age < 3. но этот вариант не охватывает все случаи. вариант лучше - хранить мин и макс число в базе в отдельных полях мин и макс: от двух лет - мин 2, макс 99 до двух лет - мин 0, макс 2 от года до трёх - мин 1, макс 3 и запрос будет логичнее
$age = array(array(0,1), array(1,3), array(3,6), array(6,500)); mysqL_query('SELECT........ WHERE age>="'.addslashes($age[$_GET['age']][0]).'" AND age<="'.addslashes($age[$_GET['age']][1]).'";'); Можно так, так компактнее, единственное, обусловимя на том, что люди больше 500 лет не живут))
опять проблемы с логикой? =) если стоит задача отлавливать ОТ и ДО, то и ОТ и ДО должны быть в базе прописаны иначе никак. компьютер хоть и умный, но если в базе только один age, то чему будут равны эти мистические ОТ и ДО - никак не догадается.
Рановато обрадовался. Товары вытаскиваются строго для той возрастной категории к которой они относятся. Т.е. если товар_1 имеет в БД начальное значение 0, а конечное 1, а товару_2 присвоено начальное значение 0, а конечное 6, то по ссылке до 1 года вытаскивается только товар_1, а товар_2 (должен вытаскиваться по ссылкам - до 1 года, от 2 до 3 лет, от 3 до 6 лет) не появляется вообще... Синтаксис ссылок на странице 1: HTML: <div id="coolmenu0"> <div id="coolmenu1"><a href="searchage.php?miniage=0&maxiage=1">До 1 года</a></div> <div id="coolmenu2"><a href="searchage.php?miniage=1&maxiage=3">От 1 до 3 лет</a></div> <div id="coolmenu3"><a href="searchage.php?miniage=3&maxiage=6">От 3 до 6 лет</a></div> <div id="coolmenu4"><a href="searchage.php?miniage=6&maxiage=100">От 6 лет</a></div> </div> ................................................................... SQL запрос на странице searchage.php: /*делаем выборку из базы данных*/ PHP: $res_searchage = mysql_query("SELECT id,cena,categorynalichie,mini_image,big_image,title FROM rubriki WHERE minvosrast >= '$miniage' AND maxvosrast <= '$maxiage' ORDER BY data DESC LIMIT $start, $num", $databasic); [/img]
Совсем незнаком с конструкцией BETWEEN, если несложно, то как должен выглядеть мой запрос в данном случае
Вариант 1: PHP: $res_searchage = mysql_query("SELECT id,cena,categorynalichie,mini_image,big_image,title FROM rubriki WHERE BETWEEN $miniage AND $maxiage ORDER BY data DESC LIMIT $start, $num", $databasic); PHP: Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN 0 AND 1 ORDER BY data DESC LIMIT 0, 2' at line 1 Вариант 2: [php]$res_searchage = mysql_query("SELECT id,cena,categorynalichie,mini_image,big_image,title FROM rubriki WHERE BETWEEN '$miniage' AND '$maxiage' ORDER BY data DESC LIMIT $start, $num", $databasic); Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN 1 AND 3 ORDER BY data DESC LIMIT 0, 2' at line 1[/php]
field BETWEEN min AND max Мускул пока не умеет читать мысли и не может добавить "minvosrast" в ваш запрос.
Все решил задачку несколько по другому: PHP: $res_searchage = mysql_query("SELECT id,cena,categorynalichie,mini_image,big_image,title FROM rubriki WHERE (minvosrast >= '$miniage' OR maxvosrast >= '$miniage') AND (maxvosrast <= '$maxiage' OR minvosrast <= '$maxiage') ORDER BY data DESC LIMIT $start, $num", $databasic); Но, тем не менее, огромное вам спасибо, за то, что сразу откликнулись