Problem med GROUP BY efter MySQL-uppdatering

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
klerre



Medlem i: 2628 dagar

Status: Offline



#740958
Inlägg Skrivet: 2016-09-08 14:07      Ämne: Problem med GROUP BY efter MySQL-uppdatering Citera

Hallå!

Loopia har uppgraderat vår MySQL till 7.x och nu fungerar inte mina SQL-frågor med GROUP BY.

Har sökt och av det jag kan tolka så vill den att alla kolumner i SELECT också ska finnas med i GROUP BY, vilket känns mycket märkligt...

Min SQL-fråga:
KOD:
1:
$sql = mysql_query("
2:
   SELECT *, SUM(caseTimeAnt), SUM(caseTimeCostSum)
3:
   FROM ise_caseTime
4:
   WHERE caseTimeCaseId = '$_GET[id]'
5:
   AND caseTimeNoInvoice = '1'
6:
   $d
7:
   GROUP BY caseTimeTitle
8:
   ORDER BY caseTimeTitle ASC
9:
   ") or die(mysql_error());
10:
   while($i = mysql_fetch_assoc($sql)) {


$d i det är fallet är ett datumintervall (BETWEEN) eller tomt beroende på om man valt att söka efter datum.

Felmeddelandet också:


Så, hur löser jag detta på ett smidigt sätt...?
Citat:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ise_nu.ise_caseTime.caseTimeId' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
[/code]




Löst!

Stängde av funktionen med

KOD:
1:
mysql_query("set session sql_mode=''");



Men om någon ändå läser detta kanske pedagogiskt kan förklara varför det blev såhär om jag har utdaterad kod eller om det är en konstig mysql-inställning...
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 3960 dagar
Från: Tavesta
Status: Offline



#740961
Inlägg Skrivet: 2016-09-08 22:18      Ämne: Citera

Jag är inte helt insatt i det här. Men här finns det lite läsning i ämnet:
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Koenigsegg



Medlem i: 3021 dagar

Status: Offline



#740967
Inlägg Skrivet: 2016-09-10 23:52      Ämne: Citera

Man brukar försöka undvika att blanda aggregerande och icke-aggregerande fält i en databasfråga eftersom resultatet blir oförutsägbart. Databasen kan inte gärna veta varifrån de icke-aggregerande fälten ska tas, vilken tabellrad som det ska handla om.

Jag föreslår att du delar upp din databasfråga så att de båda "typerna" skiljs åt. Nåt i stil med:
KOD:
1:
SELECT *
2:
FROM ise_caseTime AS ise
3:
JOIN (
4:
   SELECT SUM(caseTimeAnt), SUM(caseTimeCostSum)
5:
   FROM ise_caseTime
6:
   WHERE caseTimeCaseId='$_GET[id]' AND caseTimeNoInvoice='1'
7:
   GROUP BY caseTimeTitle) AS sums
8:
   ON sums....=ise.... AND ...

Jag är faktiskt inte helt säker på hur du skulle vilja slå ihop dem, så den biten kan du kanske fylla i bättre själv?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic