CakePHP 2.1 - Wie man DISTINCT richtig in find () verwendet

9

Ich habe eine Frage, die mich verrückt macht und ich muss zugeben, dass ich in CakePHP nicht so erfahren bin. Wie in dieser Frage erwähnt, Verwenden von DISTINCT in einer CakePHP-Suchfunktion , mit DISTINCT auf folgende Weise:

%Vor%

gibt keine DISTINCT-Werte zurück, sondern gibt alle Zeilen zurück. Tatsächlich ist die DISTINCT hier völlig sinnlos, weil CakePHP aus irgendeinem Grund in der SQL-Abfrage TableName .% Co_de% hinzufügt (warum ?? kann ich die ID-Referenz ?? entfernen) und jeden DISTINCT-Primärschlüssel (= alle Zeilen = nicht hilfreich).

Daher möchte ich immer noch die DISTINCT-Werte einer bestimmten Spalte field_name zurückgeben. Kann ich das nicht nur mit der Funktion find ('all') oder find ('list') machen? Ist es wirklich die richtige Art, es mit dieser Set :: extract () - Funktion zu tun, die im obigen Link beschrieben wird? Das scheint eine übermäßig indirekte Lösung von CakePHP zu sein, normalerweise macht Cake mir das Leben leichter. :-) Was ist die richtige Art, Find und DISTINCT zusammen zu verwenden? Vielleicht funktioniert DISTINCT nicht für find ()?

Mit Blick auf das CookBook sagen sie: "Ein schnelles Beispiel für eine DISTINCT-Abfrage. Sie können andere Operatoren wie MIN (), MAX () usw. auf ähnliche Weise verwenden:"

%Vor%

Quelle: Ссылка

Dies zeigt an, dass DISTINCT möglich sein soll, aber was ist hier? Entspricht (User.name) dem field_name, für den ich DISTINCT möchte oder ist my_column_name my field_name?

Hat sich irgendetwas davon bei der Migration von CakePHP 1.x auf CakePHP 2.x geändert? Dh sind die Antworten auf CakePHP 1.x auf Stackoverflow noch relevant?

Vielen Dank im Voraus!

    
alieninlondon 23.06.2012, 15:52
quelle

3 Antworten

10

Ja, das zweite Snippet ist der richtige Weg, um eine SELECT DISTINCT in CakePHP 2.x zu machen. User.name entspricht dem Feldnamen, in diesem Fall dem Feld name in der Tabelle users . my_column_name ist ein (optionaler) Alias ​​für den Feldnamen in der Ergebnismenge, d. h. anstelle von name wird das Feld in der Ergebnismenge my_column_name genannt.

    
dhofstet 24.06.2012, 12:40
quelle
5

Der richtige Weg, distinct in find with condition zu verwenden, ist:

%Vor%

wobei $ val einen Wert enthält, den Sie in der Abfrage übergeben möchten.

Schönen Tag noch

    
user1720419 31.10.2012 07:05
quelle
1
___ qstnhdr ___ CakePHP 2.1 - Wie man DISTINCT richtig in find () verwendet ___ answer13152875 ___

Der richtige Weg, distinct in find with condition zu verwenden, ist:

%Vor%

wobei $ val einen Wert enthält, den Sie in der Abfrage übergeben möchten.

Schönen Tag noch

    
___ tag123cakephp ___ CakePHP ist ein Open-Source-Web, ein schnelles Entwicklungsframework für PHP, das eine erweiterbare Architektur für die Entwicklung, Wartung und Bereitstellung von Anwendungen bietet. Es verwendet allgemein bekannte Entwurfsmuster wie MVC und ORM innerhalb des Konvention-über-Konfigurationsparadigmas. ___ answer11177491 ___

Ja, das zweite Snippet ist der richtige Weg, um eine CakePHP 3.X in CakePHP 2.x zu machen. distinct() entspricht dem Feldnamen, in diesem Fall dem Feld %code% in der Tabelle %code% . %code% ist ein (optionaler) Alias ​​für den Feldnamen in der Ergebnismenge, d. h. anstelle von %code% wird das Feld in der Ergebnismenge %code% genannt.

    
___ tag123find ___ Dieses Tag hat mehrere Bedeutungen. Bitte verwenden Sie dieses Tag NICHT, wenn Sie nur versuchen, etwas zu finden. ___ tag123cakephp20 ___ Fragen zum Zweig 2.0.x des CakePHP MVC-Frameworks. Wenn deine Frage allgemein auf CakePHP zutrifft, verwende das Tag [cakephp]. ___ tag123distinct ___ Das Schlüsselwort SQL DISTINCT wird verwendet, um doppelte Werte aus einem Abfrageergebnis zu entfernen. ___ tag123extract ___ Fragen zum Abrufen bestimmter Informationen aus einer (in der Regel minimal strukturierten) Datenquelle, z. B. Website, Mediendatei, Quellcodeerfassung oder komprimiertes Archiv (in diesem Fall sind die gewünschten Informationen eine oder mehrere ursprüngliche, nicht komprimierte Dateien) . Wenn Sie dieses Tag verwenden, fügen Sie bitte zusätzliche Tags hinzu, um zu klären, auf welche spezifische Umgebung / Sprache / Szenario sich Ihre Frage bezieht. ___ qstntxt ___

Ich habe eine Frage, die mich verrückt macht und ich muss zugeben, dass ich in CakePHP nicht so erfahren bin. Wie in dieser Frage erwähnt, Verwenden von DISTINCT in einer CakePHP-Suchfunktion , mit DISTINCT auf folgende Weise:

%Vor%

gibt keine DISTINCT-Werte zurück, sondern gibt alle Zeilen zurück. Tatsächlich ist die DISTINCT hier völlig sinnlos, weil CakePHP aus irgendeinem Grund in der SQL-Abfrage %code% .% Co_de% hinzufügt (warum ?? kann ich die ID-Referenz ?? entfernen) und jeden DISTINCT-Primärschlüssel (= alle Zeilen = nicht hilfreich).

Daher möchte ich immer noch die DISTINCT-Werte einer bestimmten Spalte field_name zurückgeben. Kann ich das nicht nur mit der Funktion find ('all') oder find ('list') machen? Ist es wirklich die richtige Art, es mit dieser Set :: extract () - Funktion zu tun, die im obigen Link beschrieben wird? Das scheint eine übermäßig indirekte Lösung von CakePHP zu sein, normalerweise macht Cake mir das Leben leichter. :-) Was ist die richtige Art, Find und DISTINCT zusammen zu verwenden? Vielleicht funktioniert DISTINCT nicht für find ()?

Mit Blick auf das CookBook sagen sie: "Ein schnelles Beispiel für eine DISTINCT-Abfrage. Sie können andere Operatoren wie MIN (), MAX () usw. auf ähnliche Weise verwenden:"

%Vor%

Quelle: Ссылка

Dies zeigt an, dass DISTINCT möglich sein soll, aber was ist hier? Entspricht (User.name) dem field_name, für den ich DISTINCT möchte oder ist my_column_name my field_name?

Hat sich irgendetwas davon bei der Migration von CakePHP 1.x auf CakePHP 2.x geändert? Dh sind die Antworten auf CakePHP 1.x auf Stackoverflow noch relevant?

Vielen Dank im Voraus!

    
___ antwort43735943 ___

Für %code%

Um verschiedene Felder auszuwählen, können Sie die Methode %code% verwenden:

%Vor%

CookBook-Dokumentation

    
___
Faisal 02.05.2017 10:44
quelle