[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из БД
neopk
Вобщем моя цель - сделать на сайте подбор по параметрам определенной вещи.

Из формы методом пост я передаю информацию в файл-обработчик. Все бы ничего,но у меня есть пункт Не важно в форме. В итоге я придумал такой алгоритм:

$category = $_POST['category']; 
$country = $_POST['srcountry'];
$city = $_POST['srcity'];
$raion = $_POST['raion'];
$names = $_POST['names'];
$telephone = $_POST['telephone'];

$result1 = mysql_query ("SELECT * FROM country WHERE country='$country' and city=''",$db);
$myrow1= mysql_fetch_array($result1);
$countryid = $myrow1['ID'];

$result2 = mysql_query ("SELECT * FROM country WHERE city='$city'",$db);
$myrow2 = mysql_fetch_array($result2);
$cityid = $myrow2['ID'];


if ($cityid!='') {
$SL_city=" and city='$cityid'";
}
else { $SL_city=""; }

if ($category!='null') {
$SL_category=" and category='$category'";
} else { $SL_category=""; }



$result4 = mysql_query ("SELECT * FROM profiles WHERE country='$countryid' $SL_city $SL_category ",$db);

$myrow4 = mysql_fetch_array($result4);



Просто быстро и работает ВРОДЕ БЫ. То есть echo ("SELECT * FROM profiles WHERE country='$countryid' $SL_city $SL_category "); отлично выводит все как надо, но вот в функции mysql_query это вся система не работает.

Почитав в интернете, я понял, что функция будет выполнятся толькое если она resorce, в моем же случае там, увы, не получается resource и вся эта система не работает. Может кто подскажет как выйти из этой ситуации?



Спустя 4 минуты, 18 секунд (9.11.2011 - 22:16) johniek_comp написал(а):
Цитата
я придумал

с интернета взял вообщем....здесь же куча ошибок!
И по какой книге ты учился? Попов?

а вопроса я не понял, можешь пожалуйста ещё раз для меня? smile.gif

Спустя 4 минуты, 59 секунд (9.11.2011 - 22:21) johniek_comp написал(а):
и как бы echo ("SELECT * FROM profiles WHERE country='$countryid' $SL_city $SL_category "); сделать нельзя...ух!

Спустя 7 минут, 36 секунд (9.11.2011 - 22:28) neopk написал(а):
А почему так сразу в интеренете?
В интернете я нашел только варианты с бесконечными условными конструкциями, предлагающими просчитать все возможные варианты, но если много критериев - это становиться очень громоздко. Весь этот код я придумал собственноручно. Я не исключаю, что в интернете был такой вариант, конечно же.
Этот алгорит увы не работает. Функция, как я понял, должна иметь тип (или это не тип) resource, что бы выполнится. Если я вношу значения явно - все выпоолняется без проблем и она остается resource. Но если я часть функции заменяю переменными, она меняет тип на boolean, и уже не выполняется. Хотя возмонжно я не прав, может не работает не из-за этого.
Вопрос состоит в том, можно ли это "починить", если да - то как? Если нет - может у кого есть идеи получше просчета всех возможных вариантов?

Спустя 27 секунд (9.11.2011 - 22:29) dadli написал(а):
neopk
а я особенно етот част не понял, что ето?
Цитата
WHERE country='$countryid' $SL_city $SL_category

Спустя 39 секунд (9.11.2011 - 22:30) neopk написал(а):
Исходники кинуть для теста? Все отлично выполняется.

Спустя 4 минуты, 2 секунды (9.11.2011 - 22:34) johniek_comp написал(а):
ну нужно брать примеры с интернета копировать в примеры в надежде что эти примеры будут работать!
mysql_fetch_array меняй на mysql_fetch_accos

("SELECT * FROM `profiles` WHERE country='$countryid' $SL_city $SL_category ");

название категорий должно быть в обратных кавычках

только книги, интернет не научит...ты же не понимаешь почему сейчас я тебе говорю про обратные кавычки, в инете написали ты скопировал...а в книге все описано!

Спустя 21 секунда (9.11.2011 - 22:34) imbalance_hero написал(а):
neopk
Ты лучше объясни, вот есть у тебя БД с заполненными параметрами, что именно тебе достать надо?

Спустя 21 секунда (9.11.2011 - 22:34) neopk написал(а):
Цитата (dadli @ 9.11.2011 - 19:29)
neopk
а я особенно етот част не понял, что ето?
Цитата
WHERE country='$countryid' $SL_city $SL_category

Выборка по полю country полюбому должны происходить, поэтомуей присвоенна переменная. А вот по остальным полям это не обязательно. По этому $SL_city может быть пустым значением,и выборка пройдет без него, а если оно не null - то оно будет критерием выборки, принимая значение and city='$cityid'

Спустя 1 минута, 58 секунд (9.11.2011 - 22:36) imbalance_hero написал(а):
neopk
Тебе только город с таким условием ,или абсолютно всё, включая телефон?

Спустя 2 минуты, 14 секунд (9.11.2011 - 22:39) neopk написал(а):
Цитата (johniek_comp @ 9.11.2011 - 19:34)
ну нужно брать примеры с интернета копировать в примеры в надежде что эти примеры будут работать!
mysql_fetch_array меняй на mysql_fetch_accos

("SELECT * FROM `profiles` WHERE country='$countryid' $SL_city $SL_category ");

название категорий должно быть в обратных кавычках

только книги, интернет не научит...ты же не понимаешь почему сейчас я тебе говорю про обратные кавычки, в инете написали ты скопировал...а в книге все описано!

Спасибо за совет! Сейчас буду пробовать.
З.Ы. Книги я читаю, точнее книгу,да, пока только одна. Я с нее начинал - интернет пошел позже. Книга называется "PHP 5/6 MYSQL 5/6 и Dreamweaver CS4 - Раработка интерактивных веб-сайтов. Владимир Дронов."

Спустя 47 секунд (9.11.2011 - 22:39) imbalance_hero написал(а):
$search = array();
if(!empty($_POST['city']))
$search[] = "`city` = '".mysql_real_escape_string($_POST['city'])."'";
if(!empty($_POST['phone']))
$search[] = "`phone` = '".mysql_real_escape_string($_POST['phone'])."'";

$res = mysql_query("
SELECT *
FROM `country`
WHERE `country` = '"
.mysql_real_escape_string($_POST['country'])."'
"
.(count($search) ? ' AND '.implode(' AND ',$search) : '')."
"
) or die(mysql_error());

Спустя 1 минута, 2 секунды (9.11.2011 - 22:40) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 19:36)
neopk
Тебе только город с таким условием ,или абсолютно всё, включая телефон?

Параметров в БД очень много. и все они должны учавствовать в выборке. Это не все параметры, просто я для теста пока взял парочку.

Спустя 37 секунд (9.11.2011 - 22:41) johniek_comp написал(а):
neopk
Котеров Д. его почитай, там от клиент-серверных отношений.... smile.gif не знаю как назвать, и до более глубокого как ООП

Спустя 1 минута, 20 секунд (9.11.2011 - 22:42) imbalance_hero написал(а):
Ну а если их вообще много, то тут немного с массивом поработать лучше:

$search = array();
$variables = array('city','phone'); // сюда дописываем имена лишь
foreach($variables as $k=>$v)
if(!empty($_POST[$k]))
$search[] = "`".$k."` = '".mysql_real_escape_string($_POST[$k])."'";

$res = mysql_query("
SELECT *
FROM `country`
WHERE `country` = '"
.mysql_real_escape_string($_POST['country'])."'
"
.(count($search) ? ' AND '.implode(' AND ',$search) : '')."
"
) or die(mysql_error());

Спустя 51 секунда (9.11.2011 - 22:43) johniek_comp написал(а):
neopk
вот видишь человек книги почитал и что творит!!! :blink:
Свернутый текст
$search = array();
if(!empty($_POST['city']))
$search[] = "`city` = '".mysql_real_escape_string($_POST['city'])."'";
if(!empty($_POST['phone']))
$search[] = "`phone` = '".mysql_real_escape_string($_POST['phone'])."'";

$res = mysql_query("
SELECT *
FROM `country`
WHERE `country` = '"
.mysql_real_escape_string($_POST['country'])."'
"
.(count($search) ? ' AND '.implode(' AND ',$search) : '')."
"
) or die(mysql_error());

Спустя 3 минуты, 3 секунды (9.11.2011 - 22:46) neopk написал(а):
johniek_comp Вариант с mysql_fetch_assoc и обратным кавычками так же не работает)

Спустя 1 минута (9.11.2011 - 22:47) imbalance_hero написал(а):
neopk
Ты видел, что я тебе написал?! smile.gif

Спустя 1 минута, 59 секунд (9.11.2011 - 22:49) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 19:47)
neopk
Ты видел, что я тебе написал?! smile.gif

Да-да. У вас тут все так быстро, ухх, отвлечься не успел - уже столько ответов.
Сейчас буду тестить. Спасибо!

Спустя 14 минут, 17 секунд (9.11.2011 - 23:03) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 19:47)
neopk
Ты видел, что я тебе написал?! smile.gif

Ваш вариант не работает) Т.к. $_POST['country'] не будет изначально совпадть с полем country , ее надо преобразовать как я делал тут:

$result1 = mysql_query ("SELECT * FROM country WHERE country='$country' and city=''",$db);
$myrow1= mysql_fetch_array($result1);
$countryid = $myrow1['ID'];

То есть в другой таблице есть соотношение номеров и назывний стран/городов. И поле ID из этой таблицы должно совпадать с полем country в таблице profiles. Такие запарки будут тольуо с 2-мя переменными, страна и город.

Спустя 2 минуты, 56 секунд (9.11.2011 - 23:06) imbalance_hero написал(а):
neopk
Тут скорее неправильно ты пытаешься делать, а не использовать.
Что не будет совпадать? Можешь нормально объяснить?

Спустя 7 минут, 52 секунды (9.11.2011 - 23:14) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 20:06)
neopk
Тут скорее неправильно ты пытаешься делать, а не использовать.
Что не будет совпадать? Можешь нормально объяснить?

Из формы я получаю название города и страны, но они не будут совпадать с полями country и city из таблицы profiles, т.к. в них хранится номер города и страны. Есть таблица country, в ней указано соотношение названий городов и их номеров. Из нее я вытягиваю номер города и сравниваю его номерами в табл. profiles.В вашем коде, как я понимаю, расчитанно на то, что поля будут совпадать изначально.

Спустя 7 минут, 57 секунд (9.11.2011 - 23:22) PandoraBox2007 написал(а):
Города, Регионы, Страны = http://classifiers.ru/clas/info/1

Спустя 12 минут, 41 секунда (9.11.2011 - 23:35) PandoraBox2007 написал(а):
Телефонные коды городов = http://classifiers.ru/clas/info/20

Спустя 38 минут, 33 секунды (10.11.2011 - 00:13) imbalance_hero написал(а):
neopk
Если тебе надо и оттуда и оттуда получить данные, то делай связь через left join при запросе.
Если тебе из одной лишь таблицы, в в форме пиши вместо
<option name="country" value="Ukraine">
<option name="country" value="52"> - сразу код!

Спустя 9 часов, 21 минута, 18 секунд (10.11.2011 - 09:35) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 21:13)
neopk
Если тебе надо и оттуда и оттуда получить данные, то делай связь через left join при запросе.
Если тебе из одной лишь таблицы, в в форме пиши вместо
<option name="country" value="Ukraine">
<option name="country" value="52"> - сразу код!

Ну если б так можно было бы делать... там городов под сотню, вставляется туда все через цикл из таблицы.

Спустя 42 минуты, 36 секунд (10.11.2011 - 10:17) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 20:06)
neopk
Тут скорее неправильно ты пытаешься делать, а не использовать.
Что не будет совпадать? Можешь нормально объяснить?

Сделал по первому предложенному вами варианту - вроде работает, осталось дотестировать. Спасибо за помощь, я 2 дня тупил над этой проблемой.
З.Ы. А почему сразу нельзя было просто сказать о существовании функции mysql_real_escape_string ?)

Спустя 3 часа, 44 минуты, 26 секунд (10.11.2011 - 14:02) johniek_comp написал(а):
neopk
так вопрос о другом стоял, всегда пожалуйста - заходи!

Спустя 6 часов, 31 минута, 20 секунд (10.11.2011 - 20:33) neopk написал(а):
Цитата (johniek_comp @ 10.11.2011 - 11:02)
neopk
так вопрос о другом стоял, всегда пожалуйста - заходи!

Цитата
Почитав в интернете, я понял, что функция будет выполнятся только если она resorce, в моем же случае там, увы, не получается resource и вся эта система не работает. Может кто подскажет как выйти из этой ситуации?


Я думаю тут вопрос стоял об этом). Буду заходить часто.
Быстрый ответ:

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