J'essaye de faire une recherche qui commande les résultats par leur nom de famille et ensuite par le nom de famille du client.Rails complexes trouver la commande
Customer.find(:all,
:conditions =>['customers.id IN (?)', intersection],
:joins => 'JOIN histories ON histories.customer_id = customers.id
JOIN houses ON histories.house_id = houses.id',
:order => "houses.name ASC, customers.last_name ASC",
:select => "customers.*, histories.job_title, houses.name"
)
Mon problème est que cela retournera tous les historiques liés à chaque client. Si j'ajoute AND histories.finish_date IS NULL Cela empêchera le retour de tous les historiques du client sélectionné, mais empêchera également les clients de l'intersection qui n'ont pas d'historique ou un jeu finish_date d'être renvoyés. Fondamentalement, j'ai besoin de chaque client dans l'intersection retourné une fois avec le nom de la maison actuelle (s'ils en ont un) et ensuite triés par nom de leur maison et ensuite leur nom de famille.
Alors, y a-t-il une façon de procéder?
Voici un exemple
client
id last_name
1 franks
2 doors
3 greens
histoires
id finish_date house_id customer_id
1 NULL 1 1
2 NULL 2 2
3 11/03/10 2 1
4 22/04/09 1 2
NULL = maison actuelle
maisons
id name
1 a
2 b
Résultats
intersection = 1,2,3
last_name house
franks a
doors b
greens NULL
Merci
La requête renvoie uniquement les personnes avec des historiques pas les personnes sans. Y a-t-il une jointure qui retournera toujours le client même s'il n'a pas d'histoire? – Josh
Curieux. Cela a fonctionné pour moi localement. La jointure externe doit renvoyer les clients même s'ils n'ont pas d'historique. Pouvez-vous regarder vos journaux et voir quelle requête SQL a été générée à partir de cette recherche? – Shadwell
MERCI! Juste changé la requête à utiliser: inclure et maintenant cela fonctionne – Josh