2017-08-21 1 views
0

ich meine datababase zu MySQL 5.7.15 aktualisiert haben, und ich erhalte immer diese Fehlermeldung jedes Mal versuche ich die folgende AbfragemySQL 5.7 nicht richtig funktioniert mit Gruppen

SELECT `hired_proj_id` 
FROM `hired_projects` 
WHERE `status_code` = '3' 
    AND `client_id` = 55 
GROUP BY `proj_id` 
ORDER BY `hired_proj_id` DESC; 

Expression # 1 von SELECT-Liste laufen soll nicht in GROUP BY-Klausel und enthält nichtaggregierte Spalte 'sandbox.hired_projects.hired_proj_id', die funktional nicht von Spalten in der GROUP BY-Klausel abhängig ist; das ist inkompatibel mit sql_mode = only_full_group_by

Ich habe Stackover Flow durchgesehen, konnte aber keine Antwort finden. Jede Hilfe würde wirklich geschätzt werden. Vielen Dank!!

+0

Bitte geben Sie Ihre Tabellendefinition und einige Beispieldaten an – ryantxr

+2

Bitte geben Sie Informationen zu Ihrer Datenbankstruktur an. I.e. listet ein paar Zeilen von "create table ..." auf und vielleicht einige Beispieleingaben, indem Sie einige Zeilen von "insert ..." aufführen, d. h.versuche so nah wie möglich an einem [mcve] zu kommen. – Yunnosch

Antwort

1

I oder Verwendung entweder Spalten in der Gruppe gelernt Aggregatfunktionen (Summe(), avg(), und so weiter) gestern diese dank Gordon Linoff

Alle Spalten in der Auswahl sollte.

Ihre Suche:

SELECT `hired_proj_id` 
    FROM `hired_projects` 
    WHERE `status_code` = '3' 
    AND `client_id` = 55 
GROUP BY `proj_id` 
ORDER BY `hired_proj_id` DESC 

Wenn wir Ihre Anfrage überprüfen wir sehen, dass die gewählte 'hired_proj_id' ist nicht in Ihrem GROUP BY.

Ihre Abfrage sollte wie folgt sein:

SELECT `hired_proj_id` 
     FROM `hired_projects` 
    WHERE `status_code` = '3' 
     AND `client_id` = 55 
    GROUP BY `hired_proj_id`,`proj_id` 
    ORDER BY `hired_proj_id` DESC 

Dies ist wahrscheinlich Ihre Lösung ist.

+0

Oder verwenden Sie eine Aggregatfunktion darauf. –

+0

@ Don'tPanic yup, das stimmt, aber mein Vorschlag ist nur, um ihm in die richtige Richtung zu helfen. Da die Antwort auch zitiert wird, habe ich deshalb die Aggregatfunktion nicht benutzt. – Noob

+0

Ja, es ist schwer zu wissen, welches besser wäre, wenn sie nicht wirklich beschrieben haben, was es tun soll. –

0

Expression # 1 von SELECT-Liste ist in GROUP BY-Klausel nicht und enthält nicht aggregierten Spalte

der Fehler klar ist, entweder Sie das Feld auf der SELECT auf die GROUP BY

SELECT <fieldName> 
    FROM yourTable 
    WHERE <conditions> 
    GROUP BY <fieldName> 
hinzufügen

ODER fügen Sie eine aggregierte Funktion zum SELECT

SELECT SUM(<fieldName>) 
    FROM yourTable 
    WHERE <conditions> 
    GROUP BY <otherfieldName> 
hinzu
0

Hinweis: MySQL ist unsicher und veraltet, verwenden Sie stattdessen PDO oder MySQLi. Hier

ist eine Implementierung mit MySQLi,

<?php 

    //MySQLi information 

     $db_host  = "localhost"; 
     $db_username = "username"; 
     $db_password = "password"; 

     //connect to mysqli database (Host/Username/Password) 
     $connection = mysqli_connect($db_host, $db_username, $db_password) or die("Error " . mysqli_error()); 

     //select MySQLi dabatase table 
     $db = mysqli_select_db($connection, "table") or die("Error " . mysqli_error()); 

    $sql = mysqli_query($connection, " 

    SELECT `hired_proj_id` 
     FROM `hired_projects` 
    WHERE `status_code` = '3' 
     AND `client_id` = 55 
    GROUP BY `hired_proj_id`,`proj_id` 
    ORDER BY `hired_proj_id` DESC 

"); 

    ?> 
0

ich raten bin, dass die Abfrage, die Sie wirklich wollen, ist:

SELECT DISTINCT hired_proj_id 
FROM hired_projects 
WHERE status_code = 3 AND client_id = 55 
ORDER BY hired_proj_id DESC; 

Hinweise:

  • nicht umschließen numerische Konstanten in einfachen Anführungszeichen - es sei denn, sie sind wirklich Strings.
  • Keine Notwendigkeit, Backticks überall zu verwenden.