Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Проблема с вложенным SELECT


Автор: maxim2009 13.12.2009, 14:32
 Возникла проблема с обращение к базе данных, а именно задав множественные условия получаю ошибку. 
 Сам обработчик получающий переменные из поисковой формы, сделанный на основании http://forum.vingrad.ru/forum/topic-281107...y2027781/0.html
Код

$fields = array();
if( $name != '' )
    $fields[] = 'imya = "' . mysql_real_escape_string($name) . '"'; 
if( $adress != '' )
    $fields[] = 'flat = "' . mysql_real_escape_string($adress) . '"'; 
if( $vozrast != '' )
    $fields[] = 'let = "' . mysql_real_escape_string($vozrast) . '"'; 
if( $hobby != '' )
    $fields[] = 'hobby= "' . mysql_real_escape_string($hobby) . '"'; 
//если существует переменная station, то восстанавливаем запрос в сериализованном массиве    
if (isset($station) && ($station != ''))
  {$p_station=unserialize ($station);

$arr = array();
for ($i = 0; $i < count($p_station); $i++) 
  {   $arr[] = ' station LIKE "%' . mysql_real_escape_string($p_station[$i]) .'%"';
    }}
 


Ну и сам запрос к базе.

Код

$result = mysql_query("SELECT * FROM data WHERE " . implode(" AND ", $fields). " IN (SELECT id FROM data WHERE ".implode(" OR ",$arr).")",$db);

Первое условие:  вытащить значение ID в котором поле STATION имеет схожесть(LIKE) c переменными из массива $p_station через условие 'or'
Второе условие: вытащить из таблицы DATA всё, где ID имеют значения полученные выше и (через условие 'and') полe imya=$name, поле  flat=$adress и т.д
 Возможно, что вышеописанное возможно решить другими способами,  поэтому буду крайне признателен за Вашу помощь в решении даного вопроса.

Автор: comcon1 14.12.2009, 19:19
я не понял, почему нельзя просто так:
Код

SELECT * 
from `data`
WHERE 
(station LIKE 'like1' or station LIKE 'like2') 
and imya = 'name' 
and flat = 'flat' 
and let = 'let' 
and hobby = 'hobby'


и я думал, стандартно исп-ть одинарные для текста все-таки..

Автор: maxim2009 14.12.2009, 19:45
 Просто,не получается, потому что переменная может существовать, а может и нет (заполнил ли пользователь поле или нет в поисковой форме, что является необязательным условием). Поэтому, перед вставкой в SELECT, переменные проверяются на наличие.
 Но, в любом случае, за ответ спасибо.
P.S. Вопрос остается открытым.

Автор: Ипатьев 14.12.2009, 23:33
Цитата(maxim2009 @  13.12.2009,  14:32 Найти цитируемый пост)
получаю ошибку. 

какую ошибку? Или вы считаете, что написанное в ошибке не важно?

Цитата(maxim2009 @  13.12.2009,  14:32 Найти цитируемый пост)
Ну и сам запрос к базе.

это не запрос. это кусок пхп кода. а нужно видеть именно запрос.

Добавлено через 37 секунд
ЗЫ. Вложенный селект здесь, разумеется, не нужен

Автор: maxim2009 19.12.2009, 16:29
 Всё, проблема решена  smile 
 Всем спасибо !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)