2017-09-24 1 views
-1

J'ai deux types d'enregistrements, ceux qui commencent par le nom du propriétaire, et d'autres qui commencent par le nom de l'entreprise.COMMANDER PAR 2 Colonnes dans l'ordre alphabétique, mélanger les deux colonnes plutôt que trier séparément

J'ai besoin de sortir tous ces enregistrements dans l'ordre alphabétique. Par exemple comme ça.

Apple (company) 
Bradley (name) 
Tim (name) 
Xerox (company) 

Actuellement, tous les enregistrements trient séparément, donc d'abord les noms de sociétés, puis les noms qui en résulte.

Apple (company) 
Xerox (company) 
Bradley (name) 
Tim (name) 

Ceci est la requête en cours je:

$all = "SELECT * FROM refs ORDER BY a_s_name ASC, company_a ASC"; 

Donc, pour confirmer que je dois les dossiers afin qu'ils sont mélangés triés par ordre alphabétique, peu importe si elle est une société ou un nom.

Merci pour toute aide

+0

Qu'est ce qui est stocké dans votre tableau? –

+0

@PaulSpiegel Stocké dans le tableau est des références pour les citations dans les livres et sites Web ... Certains ont un auteur et d'autres ont une société, ils doivent donc être triés par ordre alphabétique afin que je puisse produire une liste complète triée – cousbrad

+0

auteur et compagnie? '" SELECT * FROM refs ORDER BY COALESCE (a_s_name, company_a) ASC "' –

Répondre

1

Ce n'est pas clair de votre question, mais je suppose que votre table ressemble vraiment à ceci:

+----------+-----------+--------------+-------------+-----+ 
| a_s_name | company_a | other_column | another_one | ... | 
+----------+-----------+--------------+-------------+-----+ 
| NULL  | Apple  | foo   | bar   | ... | 
| Bradley | NULL  | foo   | bar   | ... | 
| Tim  | NULL  | foo   | bar   | ... | 
| NULL  | Xerox  | foo   | bar   | ... | 
+----------+-----------+--------------+-------------+-----+ 

Si cela est exact, je commande par IFNULL() état:

SELECT * FROM refs ORDER BY IFNULL(a_s_name, company_a) ASC 

de cette façon, si la colonne a_s_name contient une valeur NULL, la valeur de company_a est utilisé pour le tri.

Si vos colonnes ne contiennent pas NULL valeurs mais des chaînes vides, vous pouvez utiliser un IF() générique à la place:

SELECT * FROM refs ORDER BY IF(a_s_name = '', company_a, a_s_name) ASC 

Modifier: Pour NULL -values, l'option COALESCE() suggérée par Mark Baker pourrait effectivement être plus rapide:

SELECT * FROM refs ORDER BY COALESCE(a_s_name, company_a) ASC 
+0

Ceci est une réponse parfaite et une aide fantastique. Merci beaucoup, je vais accepter aussi correct dès que la minuterie 5 min est en hausse :) Merci encore – cousbrad

+0

Ceci est la requête qui fonctionne parfaitement: \t $ all = "SELECT * FROM refs ORDER BY IF (a_s_name = '', company_a , a_s_name) ASC "; merci :) – cousbrad

+0

Quelqu'un peut-il me faire savoir ce que j'ai mal fait dans ma question initiale pour mériter un vote négatif, afin que je puisse améliorer mes questions la prochaine fois? – cousbrad