niveau AS
Ik ben lekker aan het stoeien met mijn rechten systeem.
Ik vind het zonde om elke keer als ik wil laten zien dat de gebruiker webmaster is of moderator alle if statements of cases af te gaan.
Daarom dacht ik slim te zijn deze niveaus in een array te zetten.
Kijkende naar de datum array zoals ik 'm gebruik voor de mooie data
dus
Code (php)
ophalen met:
Code (php)
1
2
3
4
2
3
4
<?php
DATE_FORMAT(last_date, '%d-%c-%Y') AS user_datum,
DATE_FORMAT(last_date, '%H:%i:%s') AS user_tijd,
?>
DATE_FORMAT(last_date, '%d-%c-%Y') AS user_datum,
DATE_FORMAT(last_date, '%H:%i:%s') AS user_tijd,
?>
dacht ik dit ook te kunnen doen met het niveau
array
Code (php)
1
2
3
4
5
2
3
4
5
<?php
//benaming van niveau weergeven
$nivnaam = array (1 => 'Gebruiker', 'Moderator', 'Webmaster');
?>
//benaming van niveau weergeven
$nivnaam = array (1 => 'Gebruiker', 'Moderator', 'Webmaster');
?>
dus de query wordt
en dan weergeven als:
Alleen dit werkt niet. Ik denk vast te simpel over deze situatie. Wie kan me op weg helpen?
Alvast bedankt!
Cris
Tevens zie ik niet wat het verband zou moeten zijn tussen de array en de query. Het enige dat ik kan bedenken, is dat er nog ergens een stuk script is dat een verband legt.
Is het dan wel handig om het op deze manier te doen? Of is er een betere oplossing voor dit soort dingen? Steeds als die if statements of case regels zijn veel code en werk en zijn onoverzichtelijk uiteindelijk.
Ik zoek een korte universele oplossing! Wie o wie!
Groetjes!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$query = "
SELECT
nickname,
CASE
WHEN niveau = 1 THEN 'Gebruiker'
WHEN niveau = 2 THEN 'Moderator'
WHEN niveau = 3 THEN 'Webmaster'
ELSE 'onbekend'
END
AS nivnaam
FROM
tabelnaam
";
?>
$query = "
SELECT
nickname,
CASE
WHEN niveau = 1 THEN 'Gebruiker'
WHEN niveau = 2 THEN 'Moderator'
WHEN niveau = 3 THEN 'Webmaster'
ELSE 'onbekend'
END
AS nivnaam
FROM
tabelnaam
";
?>
Deze retourneert 'nivnaam', die je na het fetchen kunt opvragen met bv. $row['nivnaam'].
Niet getest!
Quote:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN niveau = 0 THEN 'Gebruiker' WHEN niveau = 1 THEN 'Mode' at line 6
Ik ben even gaan zoeken naar query's die ook met een WHEN statement werken en die doen na elke WHEN weer een else. Dat moet ik dus ook maar eens proberen!
Tot zo!
Er is ook best weinig over te vinden op internet... Het wordt zeker ook niet zoveel gebruikt Frank?
Iemand een andere oplossing? hoe doen jullie dit meestal?
WHEN niveau = 1 THEN return 'Gebruiker'
en END moet volgens mij END CASE worden
Edit:
@PHP Newbie: Het werkt hier uitstekend met alleen END.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
http://dev.mysql.com/doc/refman/5.1/en/case-statement.html
Edit weer eens veel te laat
@FRANK zie link:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Frank:
Hoe ziet jouw query er nu uit? Hier werkt een soortgelijke query namelijk uitstekend.
Edit:
@PHP Newbie: Het werkt hier uitstekend met alleen END.
Edit:
@PHP Newbie: Het werkt hier uitstekend met alleen END.
Zoals je weer ben ik net begonnen, en dit is zoals ik dacht dat het moest ;-)
Nahjah, weer verkeerd gedacht, maar heb ik weer wat geleerd ^_^
PHP:
Zoals je weer ben ik net begonnen, en dit is zoals ik dacht dat het moest ;-)
Nahjah, weer verkeerd gedacht, maar heb ik weer wat geleerd ^_^
Frank:
Hoe ziet jouw query er nu uit? Hier werkt een soortgelijke query namelijk uitstekend.
Edit:
@PHP Newbie: Het werkt hier uitstekend met alleen END.
Edit:
@PHP Newbie: Het werkt hier uitstekend met alleen END.
Zoals je weer ben ik net begonnen, en dit is zoals ik dacht dat het moest ;-)
Nahjah, weer verkeerd gedacht, maar heb ik weer wat geleerd ^_^
@Newbie volgens mij heb je gelijk hoor zie de link in mijn reply
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sql_gebruikerslijst = "SELECT
id,
nickname,
email,
CASE
WHEN niveau = 0 THEN 'Gebruiker'
WHEN niveau = 1 THEN 'Webmaster'
WHEN niveau = 2 THEN 'Moderator'
ELSE 'Onbekend'
END
AS nivnaam,
DATE_FORMAT(last_date, '%d-%c-%Y') AS user_datum,
DATE_FORMAT(last_date, '%H:%i:%s') AS user_tijd,
actief,
block
FROM users ORDER BY '$sort' ASC LIMIT ".$offset.",".$messagePerPage;
?>
$sql_gebruikerslijst = "SELECT
id,
nickname,
email,
CASE
WHEN niveau = 0 THEN 'Gebruiker'
WHEN niveau = 1 THEN 'Webmaster'
WHEN niveau = 2 THEN 'Moderator'
ELSE 'Onbekend'
END
AS nivnaam,
DATE_FORMAT(last_date, '%d-%c-%Y') AS user_datum,
DATE_FORMAT(last_date, '%H:%i:%s') AS user_tijd,
actief,
block
FROM users ORDER BY '$sort' ASC LIMIT ".$offset.",".$messagePerPage;
?>
Heel fijn! Bedankt allemaal! Toch fijn dat we er allemaal iets aan hebben jongens! ;) Ik met mijn soms lastige vragen...
Ik ben nu wel benieuwd wat er gebeurt als je END CASE gebruikt ipv END omdat mysql dit voorschrijft
Klaasjan:
Ik ben nu wel benieuwd wat er gebeurt als je END CASE gebruikt ipv END omdat mysql dit voorschrijft
Had ik het toch goed?
The syntax of the CASE statement shown here for use inside stored routines differs slightly from that of the SQL CASE expression described in Section 12.2, “Control Flow Functions”. The CASE statement cannot have an ELSE NULL clause, and it is terminated with END CASE instead of END.
Het is mij niet helemaal duidelijk waarom, maar de ene keer gebruik je END CASE en de andere keer END.
Quote:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE AS nivnaam, DATE_FORMAT(last_date, '%d-%c-%Y') AS user_da' at line 10
Dat vind mysql dus niet helemaal lekker
@Frank: Gelukkig heb je dan altijd 50% kans. Dat is iig iets! ;)