Non testé, mais ce hack devrait fonctionner...
SELECT * FROM (
SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
FROM green_profile profile
LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0
LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1
) as temptable
WHERE given_name LIKE 'levi%'
ORDER BY given_name DESC LIMIT 0 , 25
Cela fonctionne en créant simplement une table temporaire à partir de votre instruction select d'origine (sans la clause where et l'ordre), qui a les noms de colonne que vous spécifiez. Vous sélectionnez ensuite à partir de cela avec les noms de colonne que vous voulez.
Une meilleure approche pourrait être de créer une vue, avec les noms de colonne que vous voulez, et de sélectionner dans la vue...
CREATE VIEW newtable AS
SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
FROM green_profile profile
LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0
LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1;
Et puis...
SELECT * FROM newtable
WHERE given_name LIKE 'levi%'
ORDER BY given_name DESC LIMIT 0 , 25