Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расширенный поиск на сайте 
V
    Опции темы
Redstuff
  Дата 13.9.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Расширенный поиск на сайте по нескольким полям и таблицам.
Код

        $mysql_query = 'SELECT * FROM Tb_Main 
inner join TbType_doc on (Tb_Main.type=TbType_doc.id_t) 
inner join TbLvl_pr on (Tb_Main.lvl=TbLvl_pr.id_lvl) 
WHERE description LIKE'.' "%'.$search.'%" AND WHERE type_doc = '.$type.'; ';

Не могу составить правильно запрос  smile 
Может кто помочь?

Это сообщение отредактировал(а) skyboy - 13.9.2008, 16:33


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Sunvas
Дата 13.9.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 2
Всего: 89



AND WHERE -> AND

А еще рекомендую. Экранировать входящий текст при помощи mysql_real_escape_string()


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
solenko
Дата 13.9.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



Sunvas, ну обычно все таки не AND а OR (нужны то данные с минимум обним вхождением при поиске) 

Redstuff, как уже сказал Sunvas, несколько условий в where или один like по результату конкатенации всех этих полей


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 13.9.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Sunvas, чето не помогло =(

Добавлено через 2 минуты и 54 секунды
Код

<?php
if($_POST['poisk'])   {

$search = htmlspecialchars(trim($_POST['search']), ENT_QUOTES);
$type = htmlspecialchars(trim($_POST['type']), ENT_QUOTES);
$lvl = htmlspecialchars(trim($_POST['lvl']), ENT_QUOTES);
if($type == 'Везде') $type='';
if($lvl == 'Везде') $lvl='';
        $mysql_query = 'SELECT * FROM Tb_Main inner join TbType_doc on (Tb_Main.type=TbType_doc.id_t) inner join TbLvl_pr on (Tb_Main.lvl=TbLvl_pr.id_lvl) WHERE description LIKE'.' "%'.$search.'%" AND type_doc = '.$type.' AND lvl_pr = '.$lvl.';';


        $resultS = mysql_query($mysql_query, $link);
        $rowS = mysql_fetch_array($resultS); // выведем первый пункт меню без точечки
        echo '<a href="?id='.$rowS['id'].'">['.stripslashes($rowS['name']).']</a><br />';
        while($rowS = mysql_fetch_array($resultS)){
               echo ' <a href="?id='.$rowS['id'].'">'.stripslashes($rowS['name']).'<br /></a>';
        }
}
?>




--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
amazing
Дата 13.9.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


царапка



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.8.2008
Где: Каменск-Уральский

Репутация: нет
Всего: 14



Цитата(solenko @  13.9.2008,  17:20 Найти цитируемый пост)
Sunvas, ну обычно все таки не AND а OR (нужны то данные с минимум обним вхождением при поиске) 


PM MAIL   Вверх
Sunvas
Дата 13.9.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 2
Всего: 89



Redstuff, давайте сделайте вот что:
Сразу после mysql_query вставьте следующий код:
Код

die($mysql_query.'|'.mysql_error());

А результат опубликуйте.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
solenko
Дата 13.9.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



Redstuff, учитесь отладке!
1. Смотрим какой именно запрос мы выполняем, для чего просто выводим его перед выполнением echo $mysql_query;
2. Преверяем его в том же mysqladmin/консольном клиенте/вашем любимом клиенте. 
3. Если запрос отработал без ошибок, но вернул не тот результат что ожидали то идем дальше
4. Если с ходу не видите почему запрос работает не правильно, убирайте по одному условию

Кроме того, обрабтку ошибок в php никто не отменял (mysql_error)

Это сообщение отредактировал(а) solenko - 13.9.2008, 18:17


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 14.9.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Sunvas, спасибо за 
Код

die($mysql_query.'|'.mysql_error());


Код

SELECT * FROM Tb_Main inner join TbType_doc on (Tb_Main.type=TbType_doc.id_t) inner join TbLvl_pr on (Tb_Main.lvl=TbLvl_pr.id_lvl) WHERE description LIKE '%ГОСТ%' AND type_doc = '%ГОСТы%' AND lvl_pr = '%Бакалавр%';|


Нашел ошибку сразу и подправил код:
Код

<?php
if($_POST['poisk'])   {

$search = htmlspecialchars(trim($_POST['search']), ENT_QUOTES);
$type = htmlspecialchars(trim($_POST['type']), ENT_QUOTES);
$lvl = htmlspecialchars(trim($_POST['lvl']), ENT_QUOTES);
if($type == 'Везде') $type='%';
else {
    $sql1 = "SELECT id_t, type_doc FROM TbType_doc WHERE id_t=".$type.";";
    $rs1 = mysql_query($sql1);
    $row3 = mysql_fetch_array($rs1);
    $type = $row3['type_doc'];
    }
if($lvl == 'Везде') $lvl='%';
else {
    $sql5 = "SELECT id_lvl, lvl_pr FROM TbLvl_pr WHERE id_lvl=".$lvl.";";
    $rs5 = mysql_query($sql5);
    $row5 = mysql_fetch_array($rs5);
    $lvl = $row5['lvl_pr'];
    }
        $mysql_query = "SELECT * FROM Tb_Main inner join TbType_doc on (Tb_Main.type=TbType_doc.id_t) inner join TbLvl_pr on (Tb_Main.lvl=TbLvl_pr.id_lvl) WHERE description LIKE"." '%".$search."%' AND type_doc = '%".$type."%' AND lvl_pr = '%".$lvl."%';";
        die($mysql_query.'|'.mysql_error());

        $resultS = mysql_query($mysql_query, $link);
        $rowS = mysql_fetch_array($resultS); // выведем первый пункт меню без точечки
        echo '<a href="?id='.$rowS['id'].'">['.stripslashes($rowS['name']).']</a><br />';
        while($rowS = mysql_fetch_array($resultS)){
               echo ' <a href="?id='.$rowS['id'].'">'.stripslashes($rowS['name']).'<br /></a>';
        }
}
?>


Если использовать OR, то не будет жесткого ограничения поиска: по запросу, типу документа и уровня подготовки.
А надо допустим:
Уровень подготовки: Все
Тип документа: ГОСТы
Запрос: стоительные

и т.п.



--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Sunvas
Дата 14.9.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 2
Всего: 89



Не забывай пометить вопрос, как решенный ;)


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Redstuff
Дата 14.9.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Эть... вопрос еще не решен  smile 

Не правильно работает =(


Это сообщение отредактировал(а) Redstuff - 14.9.2008, 19:36


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 14.9.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Мдя... я то полный новичек в sql - запросах, но куда ваши глаза смотрели?)))
Код

SELECT * FROM Tb_Main inner join TbType_doc on (Tb_Main.type=TbType_doc.id_t) inner join TbLvl_pr on (Tb_Main.lvl=TbLvl_pr.id_lvl) WHERE description LIKE '%' AND type_doc LIKE '%' AND lvl_pr LIKE 'Бакалавр'

Вот он нужный мне запрос!
Все дело было в LIKE


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
solenko
Дата 14.9.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



Redstuff, 
Код

description LIKE '%' AND type_doc LIKE '%'

А зечем эти условия? По русски это звучит как любой дескрипшн и любой тип документа. Эти условия ВСЕГДА true
Цитата(Redstuff @  14.9.2008,  15:40 Найти цитируемый пост)
Эть... вопрос еще не решен   Не правильно работает =(

Для того чтобы помочь нужно знать какого результата вы ожидаете



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.