Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как организовать выборку из БД
 
 автор: Костян   (13.08.2008 в 14:48)   письмо автору
 
 

Как организовать выборку из БД по 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 ...и т.д.

  Ответить  
 
 автор: BinLaden   (13.08.2008 в 15:18)   письмо автору
 
   для: Костян   (13.08.2008 в 14:48)
 

Сделайте echo "SELECT (*) FROM base WHERE $vybor"; и поймете, надеюсь.

  Ответить  
 
 автор: Костян   (13.08.2008 в 15:24)   письмо автору
 
   для: BinLaden   (13.08.2008 в 15:18)
 

Делал, все четко. Может быть здесь есть небольшие синт ошибки, я с другого компа это сообщение отправлял. Восстанавливал по памяти. Наверное не правильный сам принцип. Как это вообще делается?

  Ответить  
 
 автор: BinLaden   (13.08.2008 в 15:32)   письмо автору
 
   для: Костян   (13.08.2008 в 15:24)
 

Как же "всё чётко", когда не хватает пробела между значениями переменных $a1 и $b1? Кстати, в PHP есть замечательная функция для просморта текста ошибки: mysql_error(). Советую.

  Ответить  
 
 автор: Костян   (13.08.2008 в 15:50)   письмо автору
 
   для: BinLaden   (13.08.2008 в 15:32)
 

Я же говорю, что на такие мелочи внимания обращать не надо. В моем файле все правильно. И пробелы эти есть. Я выводил в браузер переменную $vybor. Все получилось верно. Потом то, что выводилось копировал и вставлял в скрипт всесто $vybor. Выборка проходила нормально. Меня интересует, правильный ли принцип? Или это делается как-то по-другому?

  Ответить  
 
 автор: BinLaden   (13.08.2008 в 17:31)   письмо автору
 
   для: Костян   (13.08.2008 в 15:50)
 

Я не имею понятия, что для Вас мелочь, а что нет. Так что извините...

А что касается mysql_error()?

  Ответить  
 
 автор: Trianon   (13.08.2008 в 21:36)   письмо автору
 
   для: Костян   (13.08.2008 в 15:50)
 

принцип правильный. Условие составляется из кусочков.
Но составлять надо по правилам, а не абы как.
У Вас условие может запросто начинаться с AND.
По правилам же это выйдет ошибкой.

  Ответить  
 
 автор: Костян   (13.08.2008 в 22:18)   письмо автору
 
   для: Trianon   (13.08.2008 в 21:36)
 

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

  Ответить  
 
 автор: BinLaden   (13.08.2008 в 22:31)   письмо автору
 
   для: Костян   (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}";

?>

  Ответить  
 
 автор: Trianon   (14.08.2008 в 00:03)   письмо автору
 
   для: Костян   (13.08.2008 в 22:18)
 

Принцип Вы уловили.

  Ответить  
 
 автор: а-я   (13.08.2008 в 22:32)   письмо автору
 
   для: Костян   (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

  Ответить  
 
 автор: Костян   (18.08.2008 в 21:17)   письмо автору
 
   для: а-я   (13.08.2008 в 22:32)
 

Замечательно все работает! Спасибо большое!

  Ответить  
 
 автор: AcidTrash   (13.08.2008 в 23:08)   письмо автору
 
   для: Костян   (13.08.2008 в 14:48)
 

[i][/i]>if ($b) $b1="AND b='".$b."'"; else $b1="";
Постарайтесь перед AND поставить пробел.
Так скажем для корректного запроса.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования