Autor Zpráva
peta
Profil
Mam 3 tabulky.
user - uzivatel
pres - text prezenteci
reg - formulare registraci
Potrebuji vybrat seznam uzivatelu registrovanych na konferenci (`idconf`=1) a pridat k nim seznam jejich prezentaci pro tuto konferenci. Dotaz jsem sestavil takto, ale konference mi tam duplikuje 4x. Muzete mi poradit? Pripadne, jestli by nebylo lepsi jit cestou dvou dotazu nez se pokouset to takto spojit? stejne pak delam pro kazde id prezentace link na zobrazeni jejiho textu.
SELECT DISTINCT
    `b`.`idconf`,
    CONCAT(`a`.`name1`,' ',`a`.`name2`) AS `name`,
    `a`.`affiliation`,
    GROUP_CONCAT(`c`.`idpres` SEPARATOR ';') AS `idpres`
FROM    `c_reg` `b`
    LEFT JOIN `c_user` `a` ON `a`.iduser=`b`.`iduser`
    LEFT JOIN `c_pres` `c` ON `c`.iduser=`a`.`iduser`
WHERE    `b`.`idconf`=%s
GROUP BY
    `a`.`iduser`
ORDER BY
    `name` ASC
%s je pro php funkci sprint_f
Kajman
Profil
Podobná situace s porovnávanými řešeními je na
http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php
peta
Profil
Mno, ja to vyresil dvema dotazy.
K tomu clanku jsem uz jednou napsal, proc si myslim, ze je chybne.

    SELECT     `a`.`iduser`,
    `b`.`idconf`,
    CONCAT(`a`.`name1`,' ',`a`.`name2`) AS `name`,
    `a`.`affiliation`
FROM    `c_reg` `b`
    LEFT JOIN `c_user` `a` ON `a`.`iduser`=`b`.`iduser`
    LEFT JOIN `c_pres` `c` ON `c`.`iduser`=`a`.`iduser`
WHERE    `b`.`idconf`=%s
ORDER BY
    `name` ASC
                $query  = "SELECT `idpres` FROM `c_pres` WHERE `idconf`=%s AND `iduser`=%s";
Kajman
Profil
peta:
ja to vyresil dvema dotazy.

Tak to jste evidetně opět článek nepochopil. Druhý dotaz totiž spustíte tolikrát, kolik tam bude na konferenci uživatelů. Což je z hlediska výkonu nejhorší řešení.
peta
Profil
Aha, no jo. Lepsi bude `iduser` IN (1,2,3,4) :) To nevadi, tam stejne nebude vic nez 20 lidi. Neva, budu na to myslet pri dalsich upravach.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0