• Global community
    • Language:
      • Deutsch
      • English
      • EspaƱol
      • FranƧais
      • PortuguĆŖs
  • ę—„ęœ¬čŖžć‚³ćƒŸćƒ„ćƒ‹ćƒ†ć‚£
    Dedicated community for Japanese speakers
  • ķ•œźµ­ ģ»¤ė®¤ė‹ˆķ‹°
    Dedicated community for Korean speakers
Exit
0

CFOUTPUT query from CFOUTPUT query

Contributor ,
Dec 21, 2016 Dec 21, 2016

Copy link to clipboard

Copied

Bonjour,

Je voudrais faire un query d'un autre query.

Exemple :

J'ai 2 tables : une des pays et une des villes de ces pays

France : Paris Marseille Lyon

Allemagne : Berlin Cologne

Italie : Rome Milan

Je voudrais pouvoir choisir dans un 1er query les pays, dans le 2ĆØme les villes du pays choisi.

Exemple bienvenu

Merci pour votre aide.

Views

1.5K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 21, 2016 Dec 21, 2016

Copy link to clipboard

Copied

Bonjour, ZNBā€‹,

What you describe is an inefficient way of doing what you are asking for.  Putting a query loop within a query loop is resource intensive.  I will attempt to show you the method that you ask, and then I will follow that with what I believe would be a better way of aggregating the data you seek.

<cfquery name='country' datasource='#application.dsn#'>

   SELECT country

   FROM countries

   ORDER BY country ASC

</cfquery>

<cfoutput query='country'>

#country.country#<br />

<cfquery name='city' datasource='#application.dsn#'>

  SELECT city

  FROM cities

  WHERE country = <cfqueryparam value="#country.country#' />

</cfquery>

<cfoutput query='city'>

- #city.city#<br />

</cfoutput>

</cfoutput>

Now for what I consider a much better approach.

<cfquery name='country_city' datasource='#application.dsn#'>

  SELECT a.country, b.city

  FROM country a LEFT OUTER JOIN city b ON b.country = a.country

  ORDER BY a.country ASC, b.city ASC

</cfquery>

<cfoutput query='country_city' group='country'>

#country_city.country#<br />

<cfoutput>

- #country_city.city#<br />

</cfoutput>

</cfoutput>

This takes a single query, aggregates the data as you want it, and displays it quickly and efficiently, without looped database connection/disconnections, etc.

HTH,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 21, 2016 Dec 21, 2016

Copy link to clipboard

Copied

Merci pour votre rƩponse !

Mais je me rends compte que j'ai compliquƩ le script en faisant 2 tables.

Est-il possible de faire qu'une table avec une colonne Pays et une colonne ville et faire la mĆŖme chose ?

Merci par avance

Cordialement

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 21, 2016 Dec 21, 2016

Copy link to clipboard

Copied

You can put all the data into one table, yes.  But the best practice is to put countries and cities into separate tables.  It's a way of normalizing the data to reduce size.  If you have one table that has countries and cities, then the country names are being repeatedly used, over and over, taking up space that would be saved by using two tables - one table for country, one table for city with a reference ID to the country table.

Vous pouvez mettre toutes les donnƩes dans une table, oui. Mais la meilleure pratique est de mettre les pays et les villes dans des tableaux distincts. C'est un moyen de normaliser les donnƩes pour rƩduire la taille. Si vous avez une table qui a des pays et des villes, puis les noms de pays sont utilisƩs Ơ plusieurs reprises, encore et encore, en prenant l'espace qui serait sauvƩ en utilisant deux tables - une table pour le pays, une table pour la ville avec un ID de rƩfƩrence La table de pays.

V/r,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 21, 2016 Dec 21, 2016

Copy link to clipboard

Copied

I just realized that I did not completely explain my suggested more efficient method.  Assume we have two tables, as such:

TABLE COUNTRY

cid     country

1       France

2       Germany

3       Italy

TABLE CITY

city                    cid

Paris                    1

Munchen                  2

Nantes                   1

Rome                     3

Naples                   3

Lyon                     1

Milan                    3

Hanover                  2

The suggested query should have contained LEFT OUTER JOIN WHERE b.cid = a.cid so that it would match the country ID in each table.  Such a query would result in output like this:

France

- Lyon

- Nantes

- Paris

Germany

- Hanover

- Munchen

Italy

- Milan

- Naples

- Rome

HTH,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 22, 2016 Dec 22, 2016

Copy link to clipboard

Copied

Merci

J'avais compris mais pour le plaisir d'apprendre, est-il possible de faire l'affichage du pays puis de la ville avec une seule table ?

Exemple de table :

cid    country       city

1      France        Lyon

2      France        Nantes

3      France        Paris

4      Germany    Hanover

5      Germany    Munchen

6      Italy            Milan

7      Italy            Naples

8      Italy            Rome

 

Merci pour votre implication

Cordialement

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 22, 2016 Dec 22, 2016

Copy link to clipboard

Copied

Yes, all you have to do is use nested CFOUTPUT tags.  The primary CFOUTPUT tag would use the GROUP attribute, and the nested tag would use no attributes.

Oui, tout ce que vous avez Ơ faire est d'utiliser des tags CFOUTPUT imbriquƩs. La balise CFOUTPUT primaire utiliserait l'attribut GROUP et la balise imbriquƩe n'utiliserait aucun attribut.

<cfquery name='country_city' datasource='#application.dsn#'>

    SELECT cid, country, city

    FROM table_country_city

    ORDER BY country ASC, city ASC

</cfquery>

<cfoutput query='country_city' group='country'>

  #country_city.country#<br />

  <cfoutput>

    - #country_city.city#<br />

  </cfoutput><br />

</cfoutput>

One query, nested loops.  Not quite as nice as my previous suggestion, for no reason other than I much prefer to normalize data and condense code and use OUTER JOIN whenever possible. 

Une requĆŖte, boucles imbriquĆ©es. Pas tout Ć  fait aussi agrĆ©able que ma suggestion prĆ©cĆ©dente, pour aucune autre raison que je prĆ©fĆØre beaucoup normaliser les donnĆ©es et condenser le code et utiliser OUTER JOIN chaque fois que possible. 

HTH,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 22, 2016 Dec 22, 2016

Copy link to clipboard

Copied

Merci ! dans les 2 cas, cela marche TrĆØs trĆØs bien !

Toujours pour apprendre ;-), est-il possible de ne voir la liste des villes que pour le pays choisi, dans un autre select ?

Exemple :

France        Lyon

Germany     Nantes

Italy             Paris

Merci par avance

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 22, 2016 Dec 22, 2016

Copy link to clipboard

Copied

If I understand your query correctly, you would like to have each country in text, and next to it a SELECT of all the associated cities?

Certainly.  To modify what I posted, most recently:

Si je comprends bien votre requĆŖte, vous aimeriez que chaque pays soit en texte, et Ć  cĆ“tĆ© de lui un SELECT de toutes les villes associĆ©es?

Certainement. Pour modifier ce que j'ai affichƩ, plus rƩcemment:

<cfquery name='country_city' datasource='#application.dsn#'> 

  SELECT cid, country, city 

  FROM table_country_city 

  ORDER BY country ASC, city ASC 

</cfquery> 

<cfoutput query='country_city' group='country'> 

  #country_city.country# <select name="citySelect" id="cs_#replace(country_city.country,' ','_','all')#"> <!--- replace space with underscore in country name for the SELECT ID --->

  <cfoutput><option value="#country_city.city#">#country_city.city#</option></cfoutput></select><br /> 

</cfoutput>

HTH,

^_^

PS.. I just re-read your message.  Basically, a select of countries that will change the select of cities is basically the same, but more involved.  It will include some Javascript or jQuery (but don't load jQuery just for this; use it only if you are already using jQuery.)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 22, 2016 Dec 22, 2016

Copy link to clipboard

Copied

FOLLOW UP:  Raymond Camden wrote a blog on this very subject that might be helpful.  It's in English, but you should be able to translate it, easily, with Google Translate.

https://www.raymondcamden.com/2014/05/30/Related-selects-with-multiple-options/

SUIVI: Raymond Camden a Ć©crit un blog sur ce sujet qui pourrait ĆŖtre utile. C'est en anglais, mais vous devriez pouvoir le traduire, facilement, avec Google Translate.

https://www.raymondcamden.com/2014/05/30/Related-selects-with-multiple-options/

V/r,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 24, 2016 Dec 24, 2016

Copy link to clipboard

Copied

Bonjour,

En effet, il faut passer par Javascript !

Mais c'est ma limite. Je ne connais pas cette technologie.

J'ai copiĆ© l'ensemble du script et cela ne fonctionne pas šŸ˜ž

Tant pis

Cordialement

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 27, 2016 Dec 27, 2016

Copy link to clipboard

Copied

You copied Raymond's script and tried it on your system?  I don't mean to sound trite, but are you sure you put Javascript and CFscript in their proper places?  (You do say that Javascript is your limit.  I assume, then, that you are not that versed in CFscript.)  Did you load jQuery before the jQuery code?  The jQuery code won't work unless jQuery is loaded first.  Were there any error messages, either CF error messages, or Javascript error messages in the browser?  I'm curious.

Vous avez copiĆ© le script de Raymond et l'avez essayĆ© sur votre systĆØme? Je ne veux pas paraĆ®tre banal, mais ĆŖtes-vous sĆ»r de mettre Javascript et CFscript Ć  leur place? (Vous dites que Javascript est votre limite. Je suppose, alors, que vous n'ĆŖtes pas aussi versĆ© dans CFscript.) Avez-vous chargĆ© jQuery avant le code jQuery? Le code jQuery ne fonctionnera pas Ć  moins que jQuery soit chargĆ© en premier. Y at-il eu des messages d'erreur, soit des messages d'erreur des FC, soit des messages d'erreur Javascript dans le navigateur? Je suis curieux.

V/r (avec respect),

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 28, 2016 Dec 28, 2016

Copy link to clipboard

Copied

Bonjour,

Vous avez parfaitement raison (intuition fƩminine ? ).

Je me suis contentƩ de copier le code !

Je ne connais pas du tout cfscript et la faƧon de le mettre en place. La mĆŖme chose avec JQuery. Je me suis formĆ© tout seul.

De plus, en France, CF est un peu dƩlaissƩ !

Dommage, que vous soyez si loin. J'aurais bien aimƩ prendre des cours avec vous !

Cordialement

Jean-Marie

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 28, 2016 Dec 28, 2016

Copy link to clipboard

Copied

Veuillez indiquer la bonne rƩponse. Merci.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 28, 2016 Dec 28, 2016

Copy link to clipboard

Copied

AH!  Okay.  That is most likely the issue. 

The way that Raymond coded his example has the inclusion of the jQuery library, first, followed by a hard-coded SELECT that contains the first choices, followed by an empty SELECT with no options, followed by the jQuery code that he wrote.  In that code, he is using AJaX to send the choice of the first select to a ColdFusion Component (CFC) which retrieves the values related to that first choice, puts that data into a JSON object, and returns that to the page.  AJaX will detect this returned data, clear all options from the second SELECT, and generates the options for that second SELECT from the returned data.  There are a lot of steps involved, but it is pretty simple to do, actually.  I wish I could provide better instructions, but I am at work and cannot take away too much time from my assigned tasks.

La faƧon dont Raymond a codĆ© son exemple a inclus la bibliothĆØque jQuery, suivie d'un SELECT hard-coded qui contient les premiers choix, suivi d'un SELECT vide sans options, suivi du code jQuery qu'il a Ć©crit. Dans ce code, il utilise AJaX pour envoyer le choix de la premiĆØre sĆ©lection Ć  un composant ColdFusion (CFC) qui rĆ©cupĆØre les valeurs associĆ©es Ć  ce premier choix, place ces donnĆ©es dans un objet JSON et renvoie celle-ci Ć  la page. AJaX dĆ©tecte ces donnĆ©es renvoyĆ©es, efface toutes les options de la seconde SELECT et gĆ©nĆØre les options pour cette seconde SELECT Ć  partir des donnĆ©es renvoyĆ©es. Il ya beaucoup d'Ć©tapes impliquĆ©es, mais il est assez simple Ć  faire, en fait. J'aimerais pouvoir fournir de meilleures instructions, mais je suis au travail et ne peut pas prendre trop de temps de mes tĆ¢ches assignĆ©es.

V/r,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 28, 2016 Dec 28, 2016

Copy link to clipboard

Copied

Merci pour toutes ces explications ... mais insuffisantes pour que je comprenne

Je ne suis aucunement pressƩ !

Si un jour, ...

Cordialement

Jean-Marie

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 29, 2016 Dec 29, 2016

Copy link to clipboard

Copied

I attempted to provide an example based upon Raymond's code, but the Jive platform that Adobe is using for their forum is completely worthless, and turned my code into garbage.  I hope you can figure it out.

J'ai essayĆ© de fournir un exemple basĆ© sur le code de Raymond, mais la plateforme Jive qu'Adobe utilise pour son forum est totalement sans valeur, et a transformĆ© mon code en ordures. J'espĆØre que vous pouvez le comprendre.

V/r,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 31, 2016 Dec 31, 2016

Copy link to clipboard

Copied

Bonjour,

Merci pour le code que vous m'avez envoyƩ !

J'ai presque tout compris ;-).

Je ne sais oĆ¹ mettre la derniĆØre partie : app.js.

D'autre part, il doit y avoir un fichier type clƩ pays ville ou 2 fichiers type idpays pays et idville ville ?

Merci par avance

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jan 09, 2017 Jan 09, 2017

Copy link to clipboard

Copied

Le fichier app.js doit ĆŖtre placĆ© au bas de la page, avant le tag de fermeture /body. Mais la chose importante Ć  retenir est que le fichier app.js doit aller aprĆØs le code qui charge la bibliothĆØque jQuery.

Si vous utilisez une table pour contenir le pays et la ville, il n'y aura pas besoin d'ID. Toutefois, si vous utilisez des tables distinctes pour le pays et la ville, les deux doivent avoir un ID unique, et le tableau pour la ville aura besoin d'une colonne pour faire rƩfƩrence au pays dans lequel il est.

V/r,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Jan 12, 2017 Jan 12, 2017

Copy link to clipboard

Copied

Bonjour,

Voici votre script remaniƩ :

<!--- created by WolfShade in ColdFusion  --->

<!--- Dans un rƩpertoire vierge, pour les tests, procƩdez comme suit : --->

<!--- selects.htm --->
<html>
<head>   
<title>My Page</title>   
<meta name="viewport" content="width=device-width, initial-scale=1">
<!--- jQuery doit ĆŖtre chargĆ© avant la balise html de fermeture; Je le garde ici pour plus de simplicitĆ© --->   
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>

<body>   
<!--- La premiĆØre sĆ©lection est le code statique, mais vous pouvez le crĆ©er Ć  partir d'une requĆŖte, ainsi ---> 
<form>     
  <select id="country">           
   <option value="0">-- Select a Country --</option>           
   <option value="1">France</option>           
   <option value="2">Germany</option>           
   <option value="3">Italy</option>       
  </select>            
  <!--- Laissez la deuxiĆØme sĆ©lection sans options; JQuery lui donnera des options lorsque le premier select change --->       
  <select id="city">           
   <option>-- Select a City --</option>      
  </select>   
</form>
<!--- Incluez un fichier .js qui contient votre code jQuery et AJaX --->
<script src="app.js"></script>   
</body>
</html>

app.js
$(document).ready(function() {         $country= $("#country");    $city = $("#city");         $country.on("change", function(e) {        var country = $(this).val();
        // Pays est un tableau, le convertir en une liste
        country = country.join(',');         //always clear //toujours clair        $city.empty();        //reinject the default //rĆ©initialiser la valeur par dĆ©faut        $city.append("<option value=''>-- Select a City --</option>");        //if blank, do nothing        if(state === 0) return;        $.getJSON("service.cfc?method=getCities", {country:country}).done(function(res) {            for(var i=0, len=res.length; i<len; i++) {                $city.append("<option value='"+res.CITY+"'>"+res.CITY+"</option>");            }        });    });    });

<!--- service.cfc contiendra une fonction appelƩe "getCities" qui a un argument, une valeur, "country".
CrĆ©er une requĆŖte Ć  l'intĆ©rieur de la fonction qui prend la valeur qui lui est passĆ©e et on obtient toutes les villes oĆ¹ le pays est Ć©gal Ć  cette valeur retournĆ©e par cette requĆŖte. --->

Je ne sais que faire avec la derniĆØre partie.

Merci par avance

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jan 17, 2017 Jan 17, 2017

Copy link to clipboard

Copied

Create a CFC (ColdFusion component) called 'service.cfc' that has a CFFUNCTION called 'getCities'.

Inside getCities, accept the parameter 'country' and use that to query the database for cities of that country, and CFRETURN the data.  I cannot remember, however, if it needs to return a query object, or a JSON object.  I think you should return a JSON object of the query data.  But the AJaX will populate the second SELECT based upon that data.

CrƩez un CFC (composant ColdFusion) appelƩ 'service.cfc' qui a un CFFUNCTION appelƩ 'getCities'.

ƀ l'intĆ©rieur de getCities, acceptez le paramĆØtre 'country' et utilisez-le pour interroger la base de donnĆ©es pour les villes de ce pays, et CFRETURN les donnĆ©es. Je ne me souviens pas, cependant, s'il doit retourner un objet de requĆŖte, ou un objet JSON. Je pense que vous devriez retourner un objet JSON des donnĆ©es de la requĆŖte. Mais l'AJaX remplira le second SELECT en fonction de ces donnĆ©es.

V/r,

^_^

PS  DĆ©solĆ© pour la rĆ©ponse tardive. Le Mid-West Ć©tait sous la menace d'une tempĆŖte de verglas qui Ć©tait censĆ©e dĆ©truire les lignes Ć©lectriques, donc je n'ai pas Ć©tĆ© en ligne beaucoup pour les derniers jours. Heureusement, la tempĆŖte n'a pas Ć©tĆ© aussi mauvaise que prĆ©vu.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Jan 18, 2017 Jan 18, 2017

Copy link to clipboard

Copied

DƩsolƩ mais jamais fait de CFC[ ]

Cordialement

Jean-Marie

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jan 18, 2017 Jan 18, 2017

Copy link to clipboard

Copied

LATEST

I had a thought that you may not be familiar with CFC, immediately after I submitted my response. 

I do not know how much ColdFusion experience you have, but CFC files are pretty easy to learn.  While it is typical to place CFC files in a /components folder, you can place the CFC within the same folder as the CFM file that is calling it.

The basic structure of a CFC is:

CFCOMPONENT
   CFFUNCTION
      CFARGUMENT (could be more than one)
         ... code for processing ... (in this case, your database query)
      CFRETURN (data - your query object, or JSON object, whichever is required)
   /CFFUNCTION (closing tag)
/CFCOMPONENT (closing tag)

J'ai pensĆ© que vous ne connaissiez peut-ĆŖtre pas les CFC, immĆ©diatement aprĆØs avoir soumis ma rĆ©ponse.

Je ne sais pas combien d'expĆ©rience ColdFusion vous avez, mais les fichiers CFC sont assez faciles Ć  apprendre. Bien qu'il soit typique de placer des fichiers CFC dans un dossier / components, vous pouvez placer le CFC dans le mĆŖme dossier que le fichier CFM qui l'appelle.

La structure de base d'un CFC est la suivante:

CFCOMPONENT
   CFFUNCTION
      CFARGUMENT (pourrait ĆŖtre plus d'un)
         ... code pour le traitement ... (dans ce cas, votre requĆŖte de base de donnĆ©es)
      CFRETURN (donnĆ©es - votre objet de requĆŖte ou objet JSON, selon le cas)
   /CFFUNCTION (balise de fermeture)
/CFCOMPONENT (balise de fermeture)

HTH,

^_^

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation