I found a very strange behavior of the ColdFusion query . When you use this component to build a query query (QoQ) of another ColdFusion Query and use order by in several columns, the last column in the order by list is added to the selected output. This happens in CF9, 10, 11 and 2016, but not in Lucee.
unsorted = QueryNew("col1,col2,col3,col4","VarChar,VarChar,Integer,VarChar"); for (a=10;a gte 1;a--){ QueryAddRow(unsorted); QuerySetCell(unsorted,"col1","col1 #a#"); QuerySetCell(unsorted,"col2","col2 #a#"); QuerySetCell(unsorted,"col3","#a#"); QuerySetCell(unsorted,"col4","col4 #a#"); } writeDump(var="#unsorted#"); sorted = new query( dbtype = "query" ,unsorted = unsorted ,sql = "select [col1],[col2] from unsorted order by [col3], [col4] asc" ).execute().getresult(); writeDump(var="#sorted#", label="sorted");
Try this at trycf.com This is the result of the last query:
col1 col2 col4 1 col1 1 col2 1 1 2 col1 2 col2 2 2 3 col1 3 col2 3 3 4 col1 4 col2 4 4 5 col1 5 col2 5 5 6 col1 6 col2 6 6 7 col1 7 col2 7 7 8 col1 8 col2 8 8 9 col1 9 col2 9 9 10 col1 10 col2 10 10
Is this a known bug for Adobe CF?
Does anyone else know a better way to organize multiple columns in QoQ ColdFusion?
source share