|
|
|
| Как организовать выборку из БД по 20 параметрам, причем параметров, приходящих из формы не всегда 20. Пытался сделать составную переменную, но выдается ошибка MySQL.
Фрагмент кода.
if ($a) $a1="a='".$a."'"; else $a1="";
if ($b) $b1="AND b='".$b."'"; else $b1="";
$vybor=$a1.$b1;
$result = my_sql_query ("SELECT (*) FROM base WHERE $vybor");
и условие
while ...и т.д.
|
| |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 14:48)
| | Сделайте echo "SELECT (*) FROM base WHERE $vybor"; и поймете, надеюсь. | |
|
|
|
|
|
|
|
для: BinLaden
(13.08.2008 в 15:18)
| | Делал, все четко. Может быть здесь есть небольшие синт ошибки, я с другого компа это сообщение отправлял. Восстанавливал по памяти. Наверное не правильный сам принцип. Как это вообще делается? | |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 15:24)
| | Как же "всё чётко", когда не хватает пробела между значениями переменных $a1 и $b1? Кстати, в PHP есть замечательная функция для просморта текста ошибки: mysql_error(). Советую. | |
|
|
|
|
|
|
|
для: BinLaden
(13.08.2008 в 15:32)
| | Я же говорю, что на такие мелочи внимания обращать не надо. В моем файле все правильно. И пробелы эти есть. Я выводил в браузер переменную $vybor. Все получилось верно. Потом то, что выводилось копировал и вставлял в скрипт всесто $vybor. Выборка проходила нормально. Меня интересует, правильный ли принцип? Или это делается как-то по-другому? | |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 15:50)
| | Я не имею понятия, что для Вас мелочь, а что нет. Так что извините...
А что касается mysql_error()? | |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 15:50)
| | принцип правильный. Условие составляется из кусочков.
Но составлять надо по правилам, а не абы как.
У Вас условие может запросто начинаться с AND.
По правилам же это выйдет ошибкой. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2008 в 21:36)
| | Если можно, приведите кусок кода для моего случая, чтобы хотя бы принцип уловить. Я уже устал экспериментировать. Не получается и все тут. | |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 22:18)
| | Вам будет проще всё эти условия заносить в массив, а после соединить с помощью implode():
<?php
$cond = array();
if( ... ) $cond[] = '`a` = "a"';
if( ... ) $cond[] = '`b` = "b"';
if( ... ) $cond[] = '`c` = "c"';
$cond = implode(' AND ', $cond);
$query = empty($cond) ? "SELECT ... " : "SELECT ... WHERE {$cond}";
?>
|
| |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 22:18)
| | Принцип Вы уловили. | |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 14:48)
| | Проблема в лишнем AND. допустим, если 1условие пустое., то будет ошибка в запросе.
надо или поставить во всех условиях AND, а потом удалить 1ое.
или поставить постоянное условие в запросе, которое не изменить выборку, но и заглушит ошибку. допустим так:
<?
$sql = 'SELECT * FROM `base` WHERE `id`>0 ';
$sql .= $a ? ' AND `a`="'.$a.'"' : '';
$sql .= $b ? ' AND `b`="'.$b.'"' : '';
$sql .= $c ? ' AND `c`="'.$c.'"' : '';
$result = my_sql_query ($sql);
?>
|
в этом коде 1ое условие в выборке `id`>0 - будет решать проблему с лишним AND | |
|
|
|
|
|
|
|
для: а-я
(13.08.2008 в 22:32)
| | Замечательно все работает! Спасибо большое! | |
|
|
|
|
|
|
|
для: Костян
(13.08.2008 в 14:48)
| | [i][/i]>if ($b) $b1="AND b='".$b."'"; else $b1="";
Постарайтесь перед AND поставить пробел.
Так скажем для корректного запроса. | |
|
|
|