[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос на выбор из mySQL по нескольким параметрам
VanKar
Люди добрые, подскажите пожалуйста в чем моя ошибка, целый день уже бьюсь не могу понять что не так.
отправляю переменные:

http://qqq.ru/ppp.php?oper=1&brandid=Москва&example2=Улица



получаю переменные:


if ($_GET["oper"]=='0') {$oper = '0';}
else {$oper = $_GET["oper"];}

if ($_GET["brandid"]=='0') {$gorodone = '0';}
else {$gorodone = $_GET["brandid"];}

if ($_GET["example2"]=='') {$example2 = 0;}
else {$example2 = $_GET["example2"];}



Делаю запрос к БД:


$result = mysql_query ("SELECT * FROM obj WHERE (idgroop='$oper' or $oper='0') && (gorod='$gorodone' or $gorodone='0') && (strit='$example2' or $example2='0')",$db);
$myrow = mysql_fetch_array($result);


получаю ошибку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...

если передать такие переменные:

http://qqq.ru/ppp.php?oper=1&brandid=0&example2=0


то все нормально.



Спустя 17 минут, 24 секунды (28.03.2011 - 17:42) waldicom написал(а):
1. Почему таким странным образом получаете переменные? Т.е. я хочу сказать, что переменная $oper в Вашем случае всегда будет равна $_GET['oper']
2.
(idgroop='$oper' or $oper='0')

В данном случае в таблице должно существовать поле с названием 1 (значение переменной $oper). Может быть Вы имели ввиду что-то типа:
(`idgroop`='$oper' or `idgroop`='0')

?

Спустя 10 минут, 18 секунд (28.03.2011 - 17:53) VanKar написал(а):
есть форма с несколькими списками.

Пример

<select id="oper" name="oper">
<
option value="0">---</option>
<
option value="1">Россия</option>
</
select>

<
select id="gorod" name="gorod">
<
option value="0">---</option>
<
option value="Москва">Москва</option>
</
select>

<
select id="ulica" name="ulica">
<
option value="0">---</option>
<
option value="Улица">Улица</option>
</
select>


Выбираем страну и улицу
если не выбирать город, то переменная oper будет равна 0 а переменные oper=1 ulica=Улица

Мне нужно тогда из БД получить строки где oper=1 и ulica=Улица

Эта часть работает нормально
(idgroop='$oper' or $oper='0')

если не выбирать страну то выводит все страны если выбрать, то только те строки где есть эта страна

Спустя 10 минут, 57 секунд (28.03.2011 - 18:04) waldicom написал(а):
Цитата (VanKar @ 28.03.2011 - 15:53)
Выбираем страну и улицу
если не выбирать город, то переменная oper будет равна 0 а переменные oper=Москва ulica=Улица

Я, к сожалению, так и не понял, что Вы хотели этим сказать.
Подумайте, что вы хотел и сказать этой строкой (часть запроса)
(idgroop='$oper' or $oper='0')

Выбери все строки, в которых значение поля idgroop равно значению переменной $oper ИЛИ те строки, в которых значение поля с названием $oper ='0'.
НО! Поля с названием $oper нет в таблице.

Спустя 5 минут (28.03.2011 - 18:09) VanKar написал(а):
http://phpforum.ru/index.php?showtopic=18301

Вот здесь поднимался этот вопрос, но у меня в переменных как числа так и строки, может в этом проблема?

Эта часть работает нормально
(idgroop='$oper' or $oper='0')


если не выбирать страну то выводит все страны если выбрать, то только те строки где есть эта страна

Спустя 1 час, 58 минут, 19 секунд (28.03.2011 - 20:07) Snus написал(а):
&&
в запросе недопустимы! И вообще учи по книжкам сначала.

Спустя 1 день, 10 часов, 47 минут, 12 секунд (30.03.2011 - 06:54) VanKar написал(а):
Цитата
&& в запросе недопустимы! И вообще учи по книжкам сначала.

Snus если я даже поменяю на AND суть не меняется. Если ты не можешь помочь, зачем тогда вообще писать (раз мы уже на ТЫ)... я наверное сначало посмотрел по книжкам прежде чем обратиться за помощью к людям которые могут и хотят помочь...

Спустя 4 часа, 25 минут, 25 секунд (30.03.2011 - 11:20) Renden написал(а):
VanKar
Твоя проблема в том что ты переменные используешь которые должны обозначать названия столбцов, а у тебя тут они обозначают просто число.
Пример

//допустим вернуло истину в 1 или всех из таких условий.
if ($_GET["oper"]=='0') {$oper = '0';}
else {$oper = $_GET["oper"];}

// в таком случае $oper=0 , тогда запрос будет выглядить как-бы так

$result = mysql_query ("SELECT * FROM obj WHERE (idgroop='0' or 0='0') && (gorod='$gorodone' or $gorodone='0') && (strit='$example2' or $example2='0')",$db);

// (idgroop='0' or 0='0') , ничего не напрягает?)))) ктомуже Snus прав, тут and надо использовать заместо &&

Спустя 10 минут, 37 секунд (30.03.2011 - 11:30) VanKar написал(а):
Renden большое спасибо за нормальное объяснение. Всем спасибо кто пытался помочь. Решил свою проблему следующим образом:

if ($_GET["brandid"]=='0') 
{
$gorodon = '0';
$gorodone = "$gorodon='0'";
}

else {
$gorodon = $_GET["brandid"];
$gorodone = "gorod='$gorodon'";
}

if ($_GET["example2"]=='') {
$example = 0;
$example2 = "$example='0'";
}
else {
$example = $_GET["example2"];
$example2 = "strit LIKE '%$example%'";
}
............

$result = mysql_query ("SELECT * FROM obj WHERE ($gorodone) AND ($example2)...
$myrow = mysql_fetch_array($result);

Спустя 2 часа, 32 минуты, 5 секунд (30.03.2011 - 14:02) neadekvat написал(а):
Ничего не понимаю.. Уже сколько постов в теме, а про текст ошибки никто даже не вспомнил.
mysql_query() or die(mysql_error());
Зачем гадать, что не так в запросе, если надо посмотреть на сгенерированный запрос (т.е. строку с подставленными переменными) и на ошибку, которую выдает mysql?

Спустя 20 часов, 34 минуты, 35 секунд (31.03.2011 - 10:37) Лена написал(а):
Snus
Логическое И можно передавать и через AND, и через &&.

http://dev.mysql.com/doc/refman/5.5/en/non...-operators.html

Спустя 9 минут, 26 секунд (31.03.2011 - 10:46) VanKar написал(а):
Цитата (Лена @ 31.03.2011 - 07:37)

Логическое И можно передавать и через AND, и через &&.


Полностью с Вами согласен.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.