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

Форум MySQL

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

 

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

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

тема: условие if - если категория в обозначенном списке
 
 автор: zeta777   (04.08.2009 в 16:04)   письмо автору
 
 

Здравствуйте. Помогите составить условие. Мне нужно - если категория присутствует в уже заданном списке - одно действие, если нет - другое

if ($category_id IN " . $spicok . ") что -то вроде этого, но как именно?

  Ответить  
 
 автор: Trianon   (04.08.2009 в 16:13)   письмо автору
 
   для: zeta777   (04.08.2009 в 16:04)
 

Что представляет собой содержимое переменной $spisok ?
Базового типа с таким именем в php нет.

  Ответить  
 
 автор: zeta777   (04.08.2009 в 16:17)   письмо автору
 
   для: Trianon   (04.08.2009 в 16:13)
 

в конфигурационном файле у меня есть список категорий, вида:

'spisok' => "(1,2,3,4,5)",

вот если категория входит в этот список - одно действие, если нет - другое.

  Ответить  
 
 автор: Trianon   (04.08.2009 в 16:17)   письмо автору
 
   для: zeta777   (04.08.2009 в 16:17)
 

При чем тут конфиг? В переменной что лежит?
var_dump($spisok);

  Ответить  
 
 автор: zeta777   (04.08.2009 в 16:23)   письмо автору
 
   для: Trianon   (04.08.2009 в 16:17)
 

Не поняла вопрос :(

у меня есть заданный вручную (не выборкой из базы данных, а просто перечисленный по цифрам, не меняющийся) список категорий, определенный в конфигурационном файле как переменная $spisok
В условиях WHERУ я им пользуюсь легко и непри нужденно :)

WHERE category IN ('" . $config['spisok'] . "')";

а как этим воспользоваться в условии IF?

  Ответить  
 
 автор: Trianon   (04.08.2009 в 16:27)   письмо автору
 
   для: zeta777   (04.08.2009 в 16:23)
 

наверное применить в условии функцию FIND_IN_SET()

  Ответить  
 
 автор: zeta777   (04.08.2009 в 16:37)   письмо автору
 
   для: Trianon   (04.08.2009 в 16:27)
 

к сожалению, не знаю, как ее применить в if - только в where... Вы не могли бы или ссылочки или готовый синтаксис?

  Ответить  
 
 автор: ,,,,,,   (04.08.2009 в 17:02)
 
   для: zeta777   (04.08.2009 в 16:37)
 

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

The first version returns the result where value=compare_value. The second version returns the result for the first condition that is true. If there was no matching result value, the result after ELSE is returned, or NULL if there is no ELSE part.

mysql> SELECT CASE 1 WHEN 1 THEN 'one'
    ->     WHEN 2 THEN 'two' ELSE 'more' END;
        -> 'one'
mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
        -> 'true'
mysql> SELECT CASE BINARY 'B'
    ->     WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
        -> NULL

The default return type of a CASE expression is the compatible aggregated type of all return values, but also depends on the context in which it is used. If used in a string context, the result is returned as a string. If used in a numeric context, then the result is returned as a decimal, real, or integer value.

Note
The syntax of the CASE expression shown here differs slightly from that of the SQL CASE statement described in Section 12.8.6.2, “CASE Statement”, for use inside stored programs. The CASE statement cannot have an ELSE NULL clause, and it is terminated with END CASE instead of END.

IF(expr1,expr2,expr3)

If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns expr2; otherwise it returns expr3. IF() returns a numeric or string value, depending on the context in which it is used.

mysql> SELECT IF(1>2,2,3);
        -> 3
mysql> SELECT IF(1<2,'yes','no');
        -> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
        -> 'no'

If only one of expr2 or expr3 is explicitly NULL, the result type of the IF() function is the type of the non-NULL expression.

The default return type of IF() (which may matter when it is stored into a temporary table) is calculated as follows.

Expression Return Value
expr2 or expr3 returns a string string
expr2 or expr3 returns a floating-point value floating-point
expr2 or expr3 returns an integer integer

If expr2 and expr3 are both strings, the result is case sensitive if either string is case sensitive.

Note
There is also an IF statement, which differs from the IF() function described here. See Section 12.8.6.1, “IF Statement”.

  Ответить  
 
 автор: Trianon   (04.08.2009 в 17:47)   письмо автору
 
   для: zeta777   (04.08.2009 в 16:37)
 

Ссылочка:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set
SELECT IF(FIND_IN_SET(id, $spisok) > 0 , 'found','not found')

  Ответить  
 
 автор: zeta777   (05.08.2009 в 16:14)   письмо автору
 
   для: Trianon   (04.08.2009 в 17:47)
 

Спасибо. Но сделала, не мудрствуя лукаво, с помощью in_array

  Ответить  
 
 автор: Trianon   (05.08.2009 в 22:27)   письмо автору
 
   для: zeta777   (05.08.2009 в 16:14)
 

Если бы Вы изначально спросили, как оценивать принадлежность ключа некоторому множеству средствами php? ответ был бы совершенно другой.

Между прочим, in_array - далеко не лучший выход в этом плане.

  Ответить  
 
 автор: zeta777   (06.08.2009 в 13:07)   письмо автору
 
   для: Trianon   (05.08.2009 в 22:27)
 

Да, мне тоже так кажется, что in_array не самое лучшее. То есть вы советуете все-таки разобраться с FIND_IN_SET?

>Если бы Вы изначально спросили, как оценивать принадлежность ключа некоторому множеству средствами php? ответ был бы совершенно другой.
>
Да, надо научиться корректно выражать, что мне нужно :)

  Ответить  
 
 автор: Trianon   (06.08.2009 в 13:14)   письмо автору
 
   для: zeta777   (06.08.2009 в 13:07)
 

>Да, мне тоже так кажется, что in_array не самое лучшее. То есть вы советуете все-таки разобраться с FIND_IN_SET?


Безусловно. Вне связи с темой. Чем большим количеством инструментов владеешь, тем свободнее в подходах себя чувствуешь.
А FIND_IN_SET (несмотря на легкую провокацию к применению не по назначению) инструмент всё ж полезный. На мой взгляд.

а in_array($val, $list) я бы сравнил с isset($list[$key])

>>Если бы Вы изначально спросили, как оценивать принадлежность ключа некоторому множеству средствами php? ответ был бы совершенно другой.
>>
>Да, надо научиться корректно выражать, что мне нужно :)

Безусловно. Вне связи с темой. :)

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

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