MySQl CONCAT probléma

MySQl CONCAT probléma
2017-08-05T00:41:07+02:00
2017-08-05T20:40:36+02:00
2022-08-10T18:20:30+02:00
Blint
Sziasztok!

**s.*, co.name AS county, ROUND ( AVG(r.rating ), 1 ) as r - Pastebin. [pastebin.com]">Lenn ez a nem épen mindennapi SQL lekérdezésem, ami többé-kevésbé rendben is működik.
A probléma igazából a két CONCAT függvénnyel van, amivel voltaképpen JSON tömböt állítok ellő.

Viszont valamiért függ egymástól a két CONCAT, mert ha a ratings-ban nincs találat, akkor a categories is üres lesz. De ha már legalább 1 találat van a ratingsban, akkor a categories-ben is megjelennek az értékek.
Illetve ez fordítva is igaz. ha üres a categories, akkor a ratings is üres lesz, hiába lenne ott találat.

Mi lehet a gond?
Mutasd a teljes hozzászólást!
Vagy LEFT OUTER JOIN kellene, vagy még inkább két külön lekérdezés.
Mutasd a teljes hozzászólást!

  • Össze tudsz rakni egy tesztet SQLFiddle-ben, hogy lehessen látni a táblaszerkezetet és tesztelni is lehessen?
    Mutasd a teljes hozzászólást!
  • Vagy LEFT OUTER JOIN kellene, vagy még inkább két külön lekérdezés.
    Mutasd a teljes hozzászólást!
  • Group concat esetén szükséges lehet group by -jal csoportosítani azon mezöt vagy mezöket amik a lekérés során ismétlödnek.
    Join meg laza kapcsolat, amint egy kapcsolt tábládban nincs rekord nem is adja ki az eredeti sort sem. 
    Amugy a jsonná alakítást és a group concatot már a php motorral is megoldhatnád.
    Mutasd a teljes hozzászólást!
  • Köszi!
    Valóban a LEFT OUTER JOIN let ta megoldás! :)

    Igen, külön lekérdezésben is megoldható lett volna, de szeretném minél inkább minimalizálni a lekérdezések számát. És mivel az egész lekérdezés eredményéből egyébként is JSON tömb lesz, gondoltam egy füst alatt ezt a két részt eleve abban kérdezem le.
    Mutasd a teljes hozzászólást!
  • Hali!

    … de szeretném minél inkább minimalizálni a lekérdezések számát.

    A jövőt illetően (nem feltétlenül erre az esetre értve): ne a lekérdezések számát minimalizáld, hanem a lekérdezéseket tedd optimálissá, gyorssá. Sokkal többet ér több, ám hatékonyabb lekérdezés futtatása, mint egy, de lassú lekérdezésé.

    Sőt, az adott feladat függvényében akár djjjozsi azon javaslatán is elgondolkodhatsz, hogy bizonyos (rész)feladatokat jobb nem SQL-szinten, hanem a használt programnyelv/eszköz oldalán megoldani.

    JSON-nal kapcsolatban: ha a megfelelő MySQL-verziót használod (5.7.8-tól felfelé – esetleg 10.2-től MariaDB esetén), akkor beépített módon kezelheted már a JSON-adatok/-adattípust.

    Mutasd a teljes hozzászólást!
abcd