SQL-fråga ger olika resultat på 2 olika MySQL-servrar

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
VideX



Medlem i: 4733 dagar

Status: Offline



#742199
Inlägg Skrivet: 2018-05-01 23:02      Ämne: SQL-fråga ger olika resultat på 2 olika MySQL-servrar Citera

Har kopierat en databas från en server till en annan:
Server1 = MySQL 5.6.19
Server2 = MySQL 5.7.22

Har denna tabell:
KOD:
1:
FieldTypeComment
2:
c_idint(11) unsigned NOT NULL
3:
c_caseint(11) unsigned NOT NULL
4:
c_statustinyint(1) unsigned NOT NULL
5:
c_eventtext NOT NULL
6:
c_performed_byint(11) unsigned NOT NULL
7:
c_add_datedatetime NOT NULL


Kör denna fråga:
KOD:
1:
SELECT *
2:
FROM (
3:
   SELECT ad_case_events.c_add_date AS event_date, ad_case_events.*, ad_cases.c_user, ad_cases.c_short_description, ad_cases.c_full_description, ad_users.givenname, ad_users.sn, ad_users.usertype_student, ad_users.memberof, ad_users.ad_title
4:
   FROM ad_case_events, ad_users, ad_cases
5:
   WHERE ad_cases.c_id = ad_case_events.c_case
6:
   AND ad_users.u_id = ad_cases.c_user
7:
   AND ad_users.school = 'skolans_namn'
8:
   ORDER BY ad_case_events.c_add_date DESC
9:
) AS tmp_table
10:
GROUP BY c_case
11:
ORDER BY event_date DESC


Vill hämta ut den senaste raden för varje c_case.
På Server1 fungerar SQL-frågan som den ska.
På Server2 får jag i stället ut den första raden för varje rad.

Varför får jag olika resultat från servrarna?
Finns det nått bättre sätt att hämta ut resultatet från?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



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



#742200
Inlägg Skrivet: 2018-05-02 11:20      Ämne: Citera

GROUP BY kan vara rätt lurig när den används på det här sättet. Vad jag förstått är det odefinierat vilken rad i gruppen som skall returneras om raderna inte är lika. Jag skulle gissa att det inte ens finns någon garanti att alla fält kommer från samma rad.
Jag har för mig att nyare versioner av mysql skall leverera ett felmeddelande i det läget.
Meningen med GROUP BY är att den kan kombineras med funktioner som sammanställer en serie värden i ett fält i gruppen, i stil med COUNT, MAX, MIN, SUM eller AVG.

Din andra fråga har nog det enkla svaret "ja".
Där kanske någon annan har en bra lösning på hur en bra databasfråga skall se ut?
 

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



Medlem i: 4733 dagar

Status: Offline



#742202
Inlägget är accepterad som det rätta svaret Skrivet: 2018-05-04 23:50      Ämne: Citera

harald_b skrev:
GROUP BY kan vara rätt lurig när den används på det här sättet. Vad jag förstått är det odefinierat vilken rad i gruppen som skall returneras om raderna inte är lika. Jag skulle gissa att det inte ens finns någon garanti att alla fält kommer från samma rad.
Jag har för mig att nyare versioner av mysql skall leverera ett felmeddelande i det läget.
Meningen med GROUP BY är att den kan kombineras med funktioner som sammanställer en serie värden i ett fält i gruppen, i stil med COUNT, MAX, MIN, SUM eller AVG.

Din andra fråga har nog det enkla svaret "ja".
Där kanske någon annan har en bra lösning på hur en bra databasfråga skall se ut?


Efter att ha testat lite olika metoder fick jag till slut ihop denna fråga:
KOD:
1:
SELECT ad_case_events.*, ad_cases.c_user, ad_cases.c_short_description, ad_cases.c_full_description, ad_users.givenname, ad_users.sn, ad_users.usertype_student, ad_users.memberof, ad_users.ad_title
2:
FROM ad_case_events, ad_users, ad_cases
3:
WHERE ad_case_events.c_add_date IN (
4:
    SELECT MAX(ad_case_events.c_add_date)
5:
    FROM ad_case_events
6:
    GROUP BY ad_case_events.c_case
7:
)
8:
AND ad_cases.c_id = ad_case_events.c_case
9:
AND ad_users.u_id = ad_cases.c_user
10:
AND ad_users.school_ou = '$school'
11:
AND ad_case_events.c_status = 0
12:
ORDER BY ad_case_events.c_add_date DESC

Så nu fungerar det som det ska.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
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