Динамични CASE-ове

rivo

Registered
Добър вечер, чудя се има ли възможност в SWITCH, CASE-овете да се зареждат от базата данни, чрез цикъл WHILE.

Пробвах го това, но ми дава грешка, изписва че има една затваряща скоба излишна.

PHP:
switch(){
$result= mysql_query("SELECT * FROM table");
while($a=mysql_fetch_array($result)){
 case $a['id'] :
    $title = $a['title'];
 break;
}   

default:
  $title = "default";

}
 
И в SQL е с CASE - примерно така:

[sql]
$result= mysql_query("SELECT CASE WHEN ID>0 THEN title ELSE 'default' END as ParsedTitle, t.* FROM table t");
while($a=mysql_fetch_array($result)){
$title = $a['ParsedTitle'];
}

[/sql]
 
Paste-ни грешката, че нещо не се ориентирам по описанието ти, а също и самата заявка, ТОЧНО КАКТО я изпълняваш
 
PHP:
if($_GET['cat'] == $get){
	switch ($_GET['cat']) {
                $result= mysql_query("SELECT CASE WHEN ID>0 
                THEN title ELSE 'default' END as ParsedTitle, t.* FROM table t");
                while($a=mysql_fetch_array($result)){
                    $title = $a['ParsedTitle'];
                }
	  	
         }
  }

Това е грешката:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_CASE or T_DEFAULT or '}' in D:\xampp\htdocs\project\page.php on line 28[/quote]
 
Гледай сега, това цялото:
$result= mysql_query("SELECT CASE WHEN ID>0 THEN title ELSE 'default' END as ParsedTitle, t.* FROM table t");

трябва да е на един ред.
 
Изпълни точно това след като направиш връзката с базата данни и ще се ориентираш какво става. Махни ги тея CASE-ове и SWITCH-ове:

PHP:
$result= mysql_query("SELECT CASE WHEN ID>0 THEN title ELSE 'default' END as ParsedTitle, t.* FROM table t");
while($a=mysql_fetch_array($result)){
    $title = $a['ParsedTitle'];
     echo "$title<br/>";
}

просто вместо целия код, който си дал сложи това и кажи дали има още неясноти.
 
еми същата работа, то няма значение дали ще е на нов ред или ще си 1 по-дълъг ред...
Грешката е същата: arse error: syntax error, unexpected T_VARIABLE, expecting T_CASE or T_DEFAULT or '}'

Все пак благодаря за вниманието
 
Ти ме съмнява пак слагаш switch блока? Ако си го сложил го махни и сложи кода на @palex начисто.
 
relax4o каза:
Ти ме съмнява пак слагаш switch блока? Ако си го сложил го махни и сложи кода на @palex начисто.

ммм, почити стана :), сега само ако може да ми обясните как да си добавям още полета, тоест да не е само title
SELECT CASE WHEN ID>0 THEN title ELSE 'default' END as ParsedTitle, t.* FROM table t

Ако може и по 1 дума за тези болднатите :oops:
 
Ами ID трябва да е поле, което съдържа id(в този случай). И когато това ID е по-голямо от 0 ти връща полето title, ако е 0 или по-малко от нула ще ти върне ParsedTitle, който съдържа низ default.

[sql]
SELECT
CASE
WHEN ID>0 THEN title
WHEN ID>0 THEN друго-поле
ELSE 'default'
END as ParsedTitle, t.*
FROM table t
[/sql]

Така можеш да добавяш повече полета.
 
Много ви благодаря, бих дал точка и на двамата, ама няма как :!:

Благодаря ви още веднъж palex, relax4o
 

Back
Горе