SI et CAS énoncés dans la requête SELECT avec une sous-requête en eux
Les requêtes ci-dessous renvoie la valeur NULL si menu_items.parent
n'est pas 0 qui est faux.
Ce que j'essaie de faire ici est, si la valeur de menu_items.parent
ligne est 0 puis le retourner comme valeur d'origine, mais si la valeur n'est pas 0 puis retourne le nom (varchar) de la rangée correspondante de ce que jamais la valeur.
Aucune idée pourquoi je reçois NULL?
Remarque: Toutes les autres colonnes sélectionnées vient comme normale, de sorte que la requête elle-même est très bien.
Grâce
EXEMPLE 1:
SELECT
...
...
(
CASE
WHEN menu_items.parent = '0' THEN menu_items.parent
ELSE (SELECT name FROM menu_items WHERE id = menu_items.parent)
END
) AS ParentID
...
...
FROM menus
INNER JOIN menu_items ...
...
...
EXEMPLE 2:
SELECT
...
...
IF
(
menu_items.parent = '0',
menu_items.parent,
(SELECT name FROM menu_items WHERE id = menu_items.parent)
) ParentID
...
...
FROM menus
INNER JOIN menu_items ...
...
...
RÉEL DE LA REQUÊTE:
SELECT
menus.name AS MenuName,
menu_items.id AS MenuItemsId,
menu_items.name AS MenuItemsName
/*
Sub section should go here
*/
FROM users
INNER JOIN assigned_menus ON assigned_menus.fk_users_id = users.id
INNER JOIN menu_items ON menu_items.id = assigned_menus.fk_menu_items_id
INNER JOIN menus ON menus.id = menu_items.fk_menus_id
WHERE
users.id = ? AND
users.is_active = 'YES' AND
menu_items.is_active = 'YES' AND
menus.is_active = 'YES'
ORDER BY
MenuName,
MenuItemsName
menu_items TABLE
ID name parent fk_menu_items_id
1 Menus 0 1
2 Roles 0 1
3 Permissions 0 1
4 Users 0 1
5 Files 0 1
6 File Uploads 0 1
7 University 6 1
8 Details 6 1
9 Progress 6 1
10 Assg 6 1
11 Applications 0 2
12 New 11 2
13 Edit 11 2
14 Rejected 11 2
15 Approved 11 2
16 Exs 0 2
17 Assm 16 2
18 Stf 0 3
19 Std 0 3
20 Prg 19 3
21 Comm 0 4
22 Sms 21 4
23 Sms2 21 4
24 New2 0 4
25 Act 0 4
OriginalL'auteur BentCoder | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
menu_items.name
diffère simenu_items.parent
n'est pas0
donc la vôtre retourne le nom de la même ligne à la place de numéromaintenant, vérifiez la mise à jour de réponse.
Bang sur 🙂 Merci beaucoup.
OriginalL'auteur Romil Kumar Jain