Autor Zpráva
RD
Profil *
řeším problém s GROUP_CONCAT, přes LEFT JOIN připojím tabulku se sovisejícími články a přes GROUP_CONCAT je bez problému načtu. Potíž nastane tehdy, pokud se pokusím stejým způsobem připojit a nčíst další tabulku, data se mi pak množí několikrát místo jednoho záznamu... Nemáte s tímto zkušenost?

kód je takovýto:

GROUP_CONCAT(DISTINCT news.nazev ORDER BY news.datum DESC SEPARATOR \"|\") AS news_nad


LEFT JOIN
news ON news.p = p.id AND news.datum <= NOW()
Kajman_
Profil *
Možná ukažte celý dotaz (spojení s tou další tabulkou), problém bude asi tam.
RD
Profil *
SELECT
akce_akce.*,
akce_akce.id AS akce_id,

DATE_FORMAT(akce_akce.start,
GET_FORMAT(DATE,'EUR')) AS start,
akce_mesta.nazev AS city,

akce_kluby.nazev AS club,
akce_kluby.id AS club_id,
DAYNAME(akce_akce.start) AS den,



GROUP_CONCAT(server_news.nazev ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nad,
GROUP_CONCAT(server_news.nazevlink ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nadlink,
GROUP_CONCAT(server_news.linkexterni ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_linkexterni,
GROUP_CONCAT(server_news.id ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_id,

GROUP_CONCAT(server_souteze.akce ORDER BY server_souteze.expirace SEPARATOR \"|\") AS sou,
GROUP_CONCAT(server_souteze.id ORDER BY server_souteze.expirace SEPARATOR \"|\") AS sou_link,

GROUP_CONCAT(server_clanky.nadpis ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_nad,
GROUP_CONCAT(server_clanky.nadpislink ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_nadlink,
GROUP_CONCAT(server_clanky.nadpislinkexterni ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_nadlinkexterni,
GROUP_CONCAT(server_clanky.id ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_id




FROM
akce_akce
LEFT JOIN
akce_mesta ON akce_mesta.id = akce_akce.mesto
LEFT JOIN
akce_kluby ON akce_kluby.id = akce_akce.klub
LEFT JOIN
server_news ON server_news.akce = akce_akce.id AND server_news.datum <= NOW()
LEFT JOIN
server_souteze ON server_souteze.akce = akce_akce.id AND server_souteze.expirace >= NOW()
LEFT JOIN
server_clanky ON server_clanky.akce = akce_akce.id AND server_clanky.datum <= NOW()
WHERE
akce_akce.start >= NOW()
AND
akce_akce.status <> 0
GROUP BY
akce_akce.id
ORDER BY
akce_akce.start ASC, akce_akce.status DESC
Kajman_
Profil *
A nevypadlo tam jen to slovíčko distinct v group_concat?
Kajman_
Profil *
No, ještě bych to asi řešil vnořenými dotazy na ty tabulky se záznamy 1:N...

LEFT JOIN
(select server_news.akce
GROUP_CONCAT(server_newsnazev ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nad,
GROUP_CONCAT(server_news.nazevlink ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nadlink,
GROUP_CONCAT(server_news.linkexterni ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_linkexterni,
GROUP_CONCAT(server_news.id ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_id
from server_news where server_news.datum <= NOW() group by server_news.akce ) tmp_news ON tmp_news.akce = akce_akce.id
RD
Profil *
Kajman_ : DISTINCT bylo první co mě napadlo ale to nepomůže


ten druhý dotaz vypadá zajímavě, ale bohužel při dosazení do mého nefunguje, tak trošku mi není jasné toto: tmp_news ON tmp_news.akce = akce_akce.id nemohls bys mě navést jak na to,chybu to neháže ale data z toho nevytáhnu :(
Kajman_
Profil *
Ten ozávorkovaný select by měl vrátit pro každou akci jen jeden řádek. No, a nebude se dělat join se server_news, ale jen s tímto selectem pojmenovaným jako tmp_news...

SELECT
akce_akce.*,
tmp_news.*
FROM
akce_akce
LEFT JOIN
(select server_news.akce
GROUP_CONCAT(server_newsnazev ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nad,
GROUP_CONCAT(server_news.nazevlink ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nadlink,
GROUP_CONCAT(server_news.linkexterni ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_linkexterni,
GROUP_CONCAT(server_news.id ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_id
from server_news where server_news.datum <= NOW() group by server_news.akce ) tmp_news ON tmp_news.akce = akce_akce.id
WHERE
akce_akce.start >= NOW()

Když se to zaonačí podobně i se soutěžemi a články, tak by ta násobnost mohla vypadnout.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0