J'ai une table CLIENTS
comme celle-ci:
SELECT * FROM CLIENTS ORDER BY NEWCOLUMN
En fait, j'ai un script PHP qui renvoie des résultats SELECT * FROM CLIENTS ORDER BY Company ASC
. Pour récupérer les résultats par ordre alphabétique ASC
Les résultats sont insérés (pour affichage) dans un tableau où la colonne NOM ou COMPANY
est la Company
(si compilée) ou Nom + Nom
(si le nom et le prénom sont compilés)
<table> <tr> <th>NAME or COMPANY</th> <th>others info</th> </tr> <tr> <td>Doe John</td> <td> </td> </tr> <tr> <td>Yellow Jim</td> <td> </td> </tr> <tr> <td>Company 1</td> <td> </td> </tr> <tr> <td>Company 2</td> <td> </td> </tr> <tr> <td>Company 3</td> <td> </td> </tr> </table>
TABLE:
<?php foreach ( $row as $res ) if ( $res['Company'] != "" ) { echo $res['Company']; } else { echo $res['Surname'] . " " . $res['Name']; } ?>
Mais mon résultat est incorrect à cause des 2 enregistrements avec une valeur Company
vide
Company
n'est pas un champ obligatoire: si Company code> est vide, alors je dois compiler les champs
Nom
et Nom
.
Dans ce cas, je dois modifier mon script pour revenir par un nouvelle colonne dynamique basée sur ce contrôle: si Société
est compilée alors NEWCOLUMN = Société
else NEWCOLUMN = Nom + "" + Nom
puis
------------------------------------------------ | ID | Name | Surname | Company | ------------------------------------------------ | 1 | John | Doe | | ------------------------------------------------ | 2 | | | Company 1 | ------------------------------------------------ | 3 | Mark | Blue | Company 2 | ------------------------------------------------ | 4 | | | Company 3 | ------------------------------------------------ | 5 | Jim | Yellow | |
Comment puis-je y parvenir?
3 Réponses :
Vous pouvez utiliser une expression CASE
pour créer la nouvelle valeur de colonne:
SELECT *, CASE WHEN Company != '' THEN Company ELSE CONCAT(Surname, " ", Name) END AS newcolumn FROM clients ORDER BY newcolumn
@GiuseppeLodiRizzini pas de soucis. Je suis heureux d'avoir pu aider.
Vous pouvez modifier la requête comme ceci:
SELECT if (company='', concat(Surname, " ", Name) , company) as NEWCOLUMN FROM clients ORDER BY NEWCOLUMN
Je suggérerais:
select coalesce(company_name, concat_ws(' ', surname, name)) as newname
Ceci a également l'avantage de pouvoir utiliser un index.
Si vous voulez la colonne:
order by company_name, surname, name
Cela suppose que "vide" signifie NULL
.
Comment connaître la relation entre un nom sans entreprise et une entreprise sans nom?