Искать  
 
   
 
Вывод компаний где число сотрудников более 5
Отправлено: 01 Август 2008 10:44 P.M.   [ Игнорировать ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

Возьму наиболее понятный пример:

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

Вопрос: Как вывести компании, число сотрудников, в которых более 5 человек, или менее 3 человек и т.д.?

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 02 Август 2008 10:29 A.M.   [ Игнорировать ]   [ # 1 ]
Администратор
RankRankRankRank
Всего сообщений:  1354
Зарегистрирован  2008-01-02

я думаю самое оптимально - запросом выводить веблог и там ограничивать

 Подпись 

booooring…

Профиль
 
 
Отправлено: 02 Август 2008 10:33 A.M.   [ Игнорировать ]   [ # 2 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

а как именно и каким запросом, это самый главный вопрос.

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 02 Август 2008 04:24 P.M.   [ Игнорировать ]   [ # 3 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  891
Зарегистрирован  2008-01-07

http://expressionengine.com/wiki/Limit_To_Custom_Field/

Профиль
 
 
Отправлено: 02 Август 2008 04:31 P.M.   [ Игнорировать ]   [ # 4 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

немного не то,
мне нужно именно, чтобы показывались компании, у которых 5,6,7,8,9,10 и т.д. сотрудников
остальные компании, у которых сотрудников меньше - не показываются

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 02 Август 2008 04:51 P.M.   [ Игнорировать ]   [ # 5 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  891
Зарегистрирован  2008-01-07

Ну там же есть линк на расширения Марка (Easy Answer: Mark Huot’s Custom Fields extension) smile
http://expressionengine.com/forums/viewthread/38371/

Профиль
 
 
Отправлено: 02 Август 2008 04:53 P.M.   [ Игнорировать ]   [ # 6 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

оно уже не работает в новых версиях ЕЕ
вот мой пост от 06 July 2008 01:19 AM
http://expressionengine.com/forums/viewreply/423999/

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 02 Август 2008 05:00 P.M.   [ Игнорировать ]   [ # 7 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  891
Зарегистрирован  2008-01-07

хм, ну а если использовать параметр:

search:custom_field="not 0|1|2|3|4" 
Профиль
 
 
Отправлено: 02 Август 2008 05:04 P.M.   [ Игнорировать ]   [ # 8 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27
search:custom_field="not 0|1|2|3|4" 

это хорошо, но если я укажу поиск, где сотрудников более 75, тут нужен sql запрос, но к сожалению его мне не составить. А может быть здесь и не запрос вовсе?

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 03 Август 2008 09:17 A.M.   [ Игнорировать ]   [ # 9 ]
Администратор
RankRankRankRank
Всего сообщений:  1354
Зарегистрирован  2008-01-02

у тебя уже есть начало  (ты, между прочим, хотел опубликовать итоговое решение), мне лень заново его писать, выложи и я дополню. Хотя там просто нужно добавиться что-то вроде

.... WHERE ... AND c_field qty .... 
 Подпись 

booooring…

Профиль
 
 
Отправлено: 19 Август 2008 01:20 A.M.   [ Игнорировать ]   [ # 10 ]
Member
Avatar
RankRankRank
Всего сообщений:  153
Зарегистрирован  2008-08-19

чтоб работало я нашел такой выход:

правим файл /system/modules/weblog/mod.weblog.php

делаем поиск по строке (копи-пайстем строку вводим в поисковик):

else
                        
{
                            $sql 
.= $FNS->sql_andor_string($terms'wd.field_id_'.$this->cfields[$PREFS->ini('site_id')][$field_name]).' ';                            
                        
}
                    } 

добавляем после:

elseif (strncmp($terms'>'1) ==  || strncmp($terms'<'1) ==  || strncmp($terms'>='2) ==  || strncmp($terms'<='2) ==  0)
                    
{
                        
/** ---------------------------------------
                        /**    Терь мона и так: search:int=">500"
                        /**                 и так: search:int="<500"
                        /**                 и так: search:int=">500|<550"
                        /**  ((( добавлено Олегом в сети - Denik )))  v0.1
                        /** ---------------------------------------*/
                        
$exp explode('|',$terms);
                        if( 
count($exp) > )
                        
{
                            
foreach( $exp as $val )
                            
{
                                
if (strncmp($val'>='2) ==  || strncmp($val'<='2) ==  0)
                                    
$oper substr($val,0,2);  // Вернет <= | >=
                                
else
                                    
$oper substr($val,0,1);  // Вернет < | >
                                
$val trim(substr($valstrlen($oper)));
                                if( 
$val != "" && ( $oper == '>' || $oper == '<' || $oper == '>=' || $oper == '<=' ) )
                                    
$sql .= 'AND ( '.'wd.field_id_'.$this->cfields[$PREFS->ini('site_id')][$field_name].' '.$oper.' '.intval($val).' AND wd.field_id_'.$this->cfields[$PREFS->ini('site_id')][$field_name].' != \'\' ) ';
                            
}
                        }
                        
else
                        
{
                            
if (strncmp($terms'>='2) ==  || strncmp($terms'<='2) ==  0)
                                
$oper substr($terms,0,2);  // Вернет <= | >=
                            
else
                                
$oper substr($terms,0,1);  // Вернет < | >
                            
$terms trim(substr($termsstrlen($oper)));
                            if( 
$terms != "" && ( $oper == '>' || $oper == '<' || $oper == '>=' || $oper == '<=' ) )
                                
$sql .= 'AND ( '.'wd.field_id_'.$this->cfields[$PREFS->ini('site_id')][$field_name].' '.$oper.' '.intval($val).' AND wd.field_id_'.$this->cfields[$PREFS->ini('site_id')][$field_name].' != \'\' ) ';
                        
}
                    } 

Копирайт не удаляем grin

Уточнения размещения внедряемого кода:
- код внедряется в функцию build_sql_query
- после каких строк я уже указал
- перед строками:

else
                    
{
                        
/** ---------------------------------------
                        /**  "Contains" e.g.: search:body="pickle"
                        /** ---------------------------------------*/ 

будут вопросы - задавайте wink

а, да.. как юзать:

{exp:weblog:entries weblog="{my_weblog}" search:filed1=">=500" search:filed2="<=500" search:filed3=">500"

двойное ограничение для одного и того же кастам филда:

{exp:weblog:entries weblog="{my_weblog}" search:filed=">=500|<1000"
Профиль