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?