Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Есть такая проблема.
Есть три переменные.
Передаются как параметры полей таблицы БД.
То есть в таблице с приложениями есть столбцы
"совместимость"(цифра) --- "категория"(текст) ----- Юзер(текст+цифры)
Вот. Три переменные передаются в запрос в виде $sovm---$cat---$user соответственно.
Выбор происходит таким образом:
Постоянно есть только 2 из 3 переменных, то есть третья (любая) переменная не объявлена.
Как построить запрос, чтобы, исходя из условия (есть 2 из 3 переменных) происходил корректный выбор из БД?
Подтолкните, в какую сторону копать?
Спасибо.
Неактивен
Здравствуйте. Плохо понял ваш сабж, если честно. Приведите пожалуйста конкретную таблицу (с конкретными значениями), и какие переменные (к слову, о какой технологии программирования речь вообще идёт? php? c/c++? функции mysql?) приходят (опять же с конкретным примерами значений) - и то, какой результат Вы хотите получить.
Неактивен
Чтобы не углубляться далеко - это фильтр по запросу в адресной строке такого вида:
http//:........&acc=10&sovm=2&cat=Sports , где соответственно аккаунт юзера = 10, совместимость = 2 и категория = "Спортс". Это что касается запроса.
Все эти параметры принимаются как переменные, описанные выше.
Язык php.
Так вот, объявлены в запрос приходят только 2 из трех переменных. Как мне построить запрос на выбор данных из таблицы с учетом того, что есть только 2 переменные (какие - не известно, то есть либо $sovm+$cat, либо $cat+$user, либо $sovm+$user)
Пробовал через if isset() - не выбирает. Через !empty() тоже не хочет.
Вот к чему пришел, но не работает (там еще много кода, весь не буду позориться выкладывать)
$category = JRequest::getWord('cat');
$sovmest = JRequest::getWord('sovm');
$accoun = JRequest::getWord('acc');
if (!empty($category)&&!empty($accoun)){
$query = ("SELECT * FROM #__..... WHERE published=1 AND UPPER (category) LIKE '%".$category."%' AND UPPER (account) LIKE '".$accoun."'");
}
elseif (!empty($category)&&!empty($sovmest)){
$query = ("SELECT * FROM #__..... WHERE published=1 AND UPPER (category) LIKE '%".$category."%' AND sovm = '".$sovmest."'");
}
elseif (!empty($sovmest)&&!empty($accoun)){
$query = ("SELECT * FROM #__...... WHERE published=1 AND UPPER (account) LIKE '".$accoun."' AND sovm = '".$sovmest."'");
}
return $query;
Отредактированно Bayko (25.01.2012 00:49:07)
Неактивен
Ну, давайте отделим зерна от плевел - то есть стоит два вопроса
1) Как определить, пришёл ли параметр в $_GET-строке
2) Как исходя из параметров построить запрос.
1) Вообще работает такая проверка:
if ( isset($_GET['sovm']) ) { /* здесь могла быть Ваша реклама */ }
else { /* и здесь тоже могла быть Ваша реклама */ }
2) По-моему тут проще запрос по частям склеить. Как-то так:
Неактивен
Спасибо за оперативность.
У меня переменные приходят не через ГЕТ, но все равно не в этом дело. А дело в том, что мне как раз нужно вести выборку по двум переменным сразу...
И сразу, соответственно, приходится проверять на существование две переменные. Вот в этой проверке (сразу две штуки) и загвоздка. Не могу придумать, как ее осуществить.
Вложенные почему-то не работают. Вот типа такого:
elseif (isset($accoun)){
if (isset($sovmest)){
if ($sovmest == 1) {
$query->where( "published = 1 AND sovm = 1 AND UPPER (account) LIKE '".$accoun."'");
} elseif ($sovmest == 2){
$query->where( "published = 1 AND sovm = 2 AND UPPER (account) LIKE '".$accoun."'");
} elseif ($sovmest == 3){
$query->where( "published = 1 AND UPPER (account) LIKE '".$accoun."'");
}
}
}
Отредактированно Bayko (25.01.2012 01:09:38)
Неактивен
Я бы все же Вам рекомендовал разобраться с тем, как определить, приходят ли в переменные значения, а потом уже мыслить про составление запроса.
Посмотрите в кишки функции JRequest::getWord('cat'), наверное там есть какой-то критерий того, что функция не вернула значения. Может быть там NULL в этом случае возвращается, тогда проверять надо if ($myvar == NULL).
Неактивен
Дык переменные приходят исправно, не в этом дело...
Вот запрос с предыдущей страницы, он работает на ура:
if (isset($accoun)) {
$query->where( "published = 1 AND UPPER (account) LIKE '".$accoun."'");
} elseif (isset($sovmest)){
if ($sovmest == 1) {
$query->where( 'published = 1 AND sovm = 1');
} elseif ($sovmest == 2){
$query->where( 'published = 1 AND sovm = 2');
} elseif ($sovmest == 3){
$query->where( 'published = 1 ');
}
}elseif (isset($category)){
$query->where( "published = 1 AND UPPER(category) LIKE '%".$category."%'");
}
Просто вся загвоздка в том, как проверить на существование сразу двух переменных...
Неактивен
Ок, тогда проверьте так:
Неактивен
Спасибо. Сейчас и попробую. Отпишусь о результате)
Неактивен
Ага. Тут такой прикол вылазит:
category and sovmestcategory and sovmest
То есть выбор проходит хорошо, но выводит сразу по 2 раза. Видимо, поэтому и не ищет по БД...
$accoun = JRequest::getWord('acc');
заменил на
$accoun = JRequest::getVar('acc');
Так лучше
Адресная строка имеет вид: &view=appff&cat=Sports&sovm=2
Закралась шальная мысль: может, этим переменным сначала нулл приписать?
Отредактированно Bayko (25.01.2012 01:41:05)
Неактивен
Bayko написал:
Ага. Тут такой прикол вылазит:
category and sovmestcategory and sovmest
Как Вы понимаете, из приведенного мной php-кода такой результат получиться не мог , видимо это место выполняется два раза. Почему - это уж смотрите в Ваш код.
Bayko написал:
То есть выбор проходит хорошо, но выводит сразу по 2 раза. Видимо, поэтому и не ищет по БД...
Говорю же, забудьте пока про БД, разберитесь с переменными сперва.
Bayko написал:
$accoun = JRequest::getWord('acc');
заменил на
$accoun = JRequest::getVar('acc');
К сожалению, мне эти классы и функции ни о чем не говорят, тут Вам виднее .
Bayko написал:
Адресная строка имеет вид: &view=appff&cat=Sports&sovm=2
В таком случае должно выводиться category and sovmest. Собственно, оно и вывелось. Разберитесь, почему два раза.
Bayko написал:
Закралась шальная мысль: может, этим переменным сначала нулл приписать?
Не думаю, что это что-то даст, вы Всё равно присваиваете этим переменные значения, которые возвращает getWord или getVar.
Отредактированно deadka (25.01.2012 01:48:46)
Неактивен
Спасибо Вам огромное, что подтолкнули в верном направлении)
Но все же интересно мне, почему выводится 2 раза. Уже весь файл закомментил, оставил только эти строки. И все равно выводит 2 раза...
Если не вызывать эти переменные - вообще никаких нет, так что это только тут происходит...
Неактивен
Рад бы подсказать, но не знаю. Однако наша дискуссия вышла за рамки тематики форума , этот вопрос уже скорее чисто php-шный, его можно задать в соответствующем разделе на webew.ru или других ресурсах, посвящённых php. А когда вопрос дойдёт до формирования sql-запросов - добро пожаловать обратно в тред .
Неактивен