ich ein Coldfusion-Neuling bin und ich versuchte, Duplikate aus der Ausgabe des Skripts zu entfernen unten mit dem Gruppe-Attribute in dem <cfoutput>
-tag aber das macht irgendwie nicht:Wie konvertiert man eine Schleife in ein Array in ColdFusion, um Duplikate zu entfernen?
<cfoutput query="show_books" group="titleno">
Also habe ich versucht, Gruppenduplikate über SQL:
GROUP BY books.ean
Aber leider funktioniert das auch nicht.
Also ich denke jetzt, ich muss die Schleife unten in ein Array oder eine Liste konvertieren, um die Ergebnisse der ersten Suche in ein Array/eine Liste zu schreiben, sortieren Sie, entfernen Sie dann die Duplikate und die endgültige Ausgabe von das Array/die Liste. Aber ich habe keine Ahnung, wie man das in ColdFusion macht. So wird jede Hilfe geschätzt!
Das Skript stammt von einer Website mit Büchern. Wenn Sie die Detailseite eines Buchs öffnen, sehen Sie am unteren Rand dieser Detailseite weitere Bücher desselben Autors. Das Problem ist, dass es mit nur einem Autor funktioniert. Auch mit zwei oder mehr Autoren, aber nur (und das ist der Kern), wenn sie nicht mehr als ein Buch zusammen geschrieben haben. So z.B. wir haben ein Team von drei Autoren, die zusammen vier verschiedene Bücher geschrieben haben, sehen wir 12 Bücher in der Ausgabe statt vier ... :-(
Hier ist der Code:
<cfloop query="title_data">
<!-- query database -->
<cfquery name="show_books" datasource="#database#" dbtype="ODBC">
select * from books, books_publisher, books_mapping
where books.ean <> '#ean#' AND
books_publisher.publisher_id = #title_data.publisher_id# AND
books_publisher.partner_id = books_mapping.adrno AND
books.titleno = books_mapping.titleno AND
(books.visibility = 1 OR books.visibility = 2 OR books.visibility = 20 OR books.visibility = 95 OR books.visibility = 102 OR books.visibility = 107)
order by books.title asc, books.ean asc
</cfquery>
<cfoutput query="show_books">
<!-- load publisher -->
<cfquery name="show_mapped" dataSource="#database#" dbtype="ODBC">
select * from books_mapping
WHERE titleno = #show_books.titleno# AND
(role = '1' OR role = '2')
order by books_mapping.ranking
</cfquery>
<cfset authorteam = #show_mapped.recordcount#>
<!-- show title data of books -->
<table>
<tr><td>
<a href="index.cfm?view=3&ean=#ean#"><img src="./covers/small/#cover#" class="shadow"></a>
</td>
<td>
<cfloop query="show_mapped">
<cfquery name="show_publisher" dataSource="#database#" dbtype="ODBC">
select *
from books_publisher
WHERE partner_id = #show_mapped.adrno#
</cfquery>
<cfloop query="show_publisher">
<cfset authorteam = authorteam -1>
<a href="index.cfm?view=6&author_id=#publisher_id#" class="authors">#publisher_prename# #publisher_surname#</a>
<cfif authorteam neq '0'>|</cfif>
</cfloop>
</cfloop>
....
</td>
</tr>
<tr><td align="right">#price_eur# EUR</td>
<td> ...
<a href="index.cfm?view=3&ean=#ean#" class="further_button">Details</a>
</td>
</tr>
</table>
</cfoutput>
</cfloop>
Auch wenn es ist eine andere Möglichkeit oder Workaround, um die doppelten Einträge in der Ausgabe zu entfernen, wäre es eine große Hilfe für mich.Ich bin offen für alle Arten von Vorschlägen, nur um es zum Laufen zu bringen
(Bearbeiten) Ignorieren anderer Probleme für einen Moment A) Bitte bearbeiten Sie Ihren Beitrag, um die Beziehungen der drei (3) Tabellen zu beschreiben und ein kleines Datensample aufzunehmen. B) Welche Spalte (n) identifizieren den Autor? Es ist schwer zu sagen, da die Abfragen SELECT * statt einzelner Spaltennamen verwenden. – Leigh
Ich vermute stark, dass die Abfrage und/oder die Filter entweder falsch oder weniger effizient sind, wie sie sein könnten. Durch die Bereitstellung eines * kleinen * Datensamples und einer Beschreibung der Tabellen können wir eine effizientere Abfrage vorschlagen. – Leigh