niveau AS

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Crispijn -

Crispijn -

24/08/2006 22:13:00
Quote Anchor link
Ha allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
//nette datum weergeven
$weekdagnamen = array ('zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');
$maandnamen = array (1 => 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>


ophalen met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
                        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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
//benaming van niveau weergeven
$nivnaam = array (1 => 'Gebruiker', 'Moderator', 'Webmaster');

?>


dus de query wordt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$sql
= "SELECT nickname, niveau AS user_niveau";

?>


en dan weergeven als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo $row['niv_naam'];
?>


Alleen dit werkt niet. Ik denk vast te simpel over deze situatie. Wie kan me op weg helpen?

Alvast bedankt!

Cris
 
PHP hulp

PHP hulp

17/11/2024 23:29:00
 
Frank -

Frank -

24/08/2006 22:20:00
Quote Anchor link
Waar zou $row['niv_naam'] vandaan moeten komen? Je vraag nickname en user_niveau op (zie query), daar kom ik niv_naam niet in tegen.

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.
 
Crispijn -

Crispijn -

24/08/2006 22:53:00
Quote Anchor link
Ik dacht dat die zou moeten corresponderen met de array... maar dat is dus blijkbaar niet zo...

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!
 
Frank -

Frank -

24/08/2006 23:10:00
Quote Anchor link
Gebruik eens een CASE in de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
"
;
?>

Deze retourneert 'nivnaam', die je na het fetchen kunt opvragen met bv. $row['nivnaam'].

Niet getest!
 
Crispijn -

Crispijn -

24/08/2006 23:17:00
Quote Anchor link
Helaas Frank, dat wordt 'm niet

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!
 
Crispijn -

Crispijn -

24/08/2006 23:25:00
Quote Anchor link
Nee, dat wordt 'm niet. Bij alles wat ik probeer krijg ik een error in mijn sql syntax... Het werkt dus uberhaupt niet met WHEN...

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?
 
PHP Newbie

PHP Newbie

24/08/2006 23:35:00
Quote Anchor link
voor gebruiker e.d. moet return staan dacht ik:

WHEN niveau = 1 THEN return 'Gebruiker'

en END moet volgens mij END CASE worden
 
Frank -

Frank -

24/08/2006 23:36:00
Quote Anchor link
Hoe ziet jouw query er nu uit? Hier werkt een soortgelijke query namelijk uitstekend.

Edit:
@PHP Newbie: Het werkt hier uitstekend met alleen END.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Klaasjan Boven

Klaasjan Boven

24/08/2006 23:37:00
Quote Anchor link
Probeer in Frank zijn voorbeeld eens END CASE ipv END

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
 
PHP Newbie

PHP Newbie

24/08/2006 23:39:00
Quote Anchor link
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.


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 ^_^
 
Klaasjan Boven

Klaasjan Boven

24/08/2006 23:42:00
Quote Anchor link
PHP:
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.


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
 
Crispijn -

Crispijn -

24/08/2006 23:55:00
Quote Anchor link
Stom! Een komma verkeerd. Hij werkt nu als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>


Heel fijn! Bedankt allemaal! Toch fijn dat we er allemaal iets aan hebben jongens! ;) Ik met mijn soms lastige vragen...
 
Klaasjan Boven

Klaasjan Boven

24/08/2006 23:57:00
Quote Anchor link
Ik ben nu wel benieuwd wat er gebeurt als je END CASE gebruikt ipv END omdat mysql dit voorschrijft
 
PHP Newbie

PHP Newbie

24/08/2006 23:58:00
Quote Anchor link
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?
 
Frank -

Frank -

24/08/2006 23:59:00
Quote Anchor link
@Klaasjan: Zie ook de note:
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.
 
Crispijn -

Crispijn -

25/08/2006 00:01:00
Quote Anchor link
Wanneer ik END CASE doe met verder precies dezelfde query krijg ik dit:

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! ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.