php - case statement in INSERT INTO statement -
i have following register.php code
<?php if( $_post ) { include("php_connect/php_connect.php"); $start_year = $_post['start_year']; $start_month = $_post['start_month']; $start_day = $_post['start_day']; $start_hour = $_post['start_hour']; $start_minute = $_post['start_minute']; $place = $_post['place']; $salah = $_post['salah']; $rakat = implode(",", $_post['rakat']); $query = "insert performed_salah (year, month, date, time, place, prayer, rakat, reg_date) values ('$start_year', '$start_month', '$start_day', ('$start_hour:$start_minute'), '$place', '$salah', '$rakat', now())"; if ($conn->query($query) === true) { echo "new record created successfully"; } else { echo "error: " . $query . "<br>" . $conn->error; } $conn->close(); } ?>
in table have column performance. trying create case statement looks like
case when prayer='a' , rakat=('rakat-a,rakat-b') performance = 100% when prayer='a' , rakat=('rakat-a') or rakat=('rakat-b') performance = 50% when prayer='b' , rakat=('rakat-a,rakat-b,rakat-c,rakat-d) performance = 100% when prayer = 'b' , rakat=('rakat-a,rakat-b,rakat-c') performace = 75% when prayer = 'b' , rakat=('rakat-a,rakat-b') performace = 50% when prayer = 'b' , rakat=('rakat-a') performace = 25%
how go making it?
i tried got error:
"insert performed_salah('$start_year', '$start_month', '$start_day', ('$start_hour:$start_minute'), '$place', '$salah', '$rakat', (case when prayer = 'fajar' , (rakat='2sunnat,2faradh') " . '100%' . " when prayer = 'fajar' , (rakat='2sunnat' or rakat='2faradh') " . ' '50%' . "end) '$performance', now())";
this query:
insert performed_salah(year, month, date, time, place, prayer, rakat, reg_date) values ('$start_year', '$start_month', '$start_day', ('$start_hour:$start_minute'), '$place', '$salah', '$rakat', now());
it makes sense. second query makes no sense @ all. but, 1 fundamental problem case
statement cannot use column names table. can after fact, using update
, in insert, need variables used insert. this:
insert performed_salah(year, month, date, time, place, prayer, rakat, reg_date, performance) values ('$start_year', '$start_month', '$start_day', ('$start_hour:$start_minute'), '$place', '$salah', '$rakat', (case when '$prayer' = 'fajar' , '$rakat' = '2sunnat,2faradh' '100%' when '$prayer' = 'fajar' , '$rakat' in ('2sunnat', '2faradh') '50%' end), now());
there still lots of room improvement. field performance
looks number, should store way. sql code safer if use parameters, rather explicitly putting values in string. might give idea on how proceed.
Comments
Post a Comment