Zavrieť

Porady

SQL - priradovaci problem

Zdravim!

Svoj problem mozem zjednodusit do nasledovneho prikladu:

Mam mnozinu otazok a mnozinu odpovedi. Ziskal som (join) mnozinu vsetkych otazok a prisluchajucich odpovedi.

A teraz potrebujem v SQL zistit, ci existuje na kazdu otazku jedinecna odpoved, alebo nie.

A toto neviem ako spravit - hoci s databazami sa uz hram uz dlho, s tymto som sa zatial nestretol...

Dakujem za help!
Pravidlá a tipy
  • Každý móže napísať len 1 odpoveď. Neskor mozete svoju odpoveď vylepšiť.
  • Odpoveď má priniesť riešenie na otázku, vyvarujte sa hodnotenia otázky.
  • Odpoveď má byť viac o faktoch ako o názoroch.
Dalšie pravidla a tipy
    Ak potrebujete v otázke niečo upresniť, najskôr sa spýtajte na podrobnosti.
    Koncept slúži na uloženie rozpracovanej odpovede, koncept sa zobrazuje len Vám, až kým ho nezverejníte.
    Ak máte podobnú otázku, založte Novú otázku alebo Súvisiacu otázku.
    ❤ Buďte priateľskí ❤
    Sme súčasťou jednej komunity, ktorá si chce vzájomne pomáhať, rozdieľnosť je vítaná ak neubližuje!
    Usporiadať podľa času

    robin78 je offline (nepripojený) robin78

    robin78
    Predpokladam, ze mas tabulku Otazky a tabulku Odpovede. Tabulka Odpovede obsahuje cudzi kluc na Otazky.

    Zaujima ta, ze ci existuje pre kazdy zaznam v tabulke otazky aspon jeden zaznam v tabulke Odpovede?

    V akej forme chces vysledok? T.j. len odpoved true / false, alebo ako?

    Flymaster je offline (nepripojený) Flymaster

    Flymaster
    no zalezi na tom, ci mas tie odpovede ocislovane... teda, ci mas napr. dva stlpce v tabulke odpovedi, ak ano, viem ti pomoc takto, napr.

    stlpce nech sa volaju: cislo, odpoved

    pocet odpovedi na danu otazku zistis takto:

    select distinct(cislo), count(cislo) as pocet_odpovedi
    from tvoja_tabulka
    order by 2 asc
    group by cislo

    tusim to takto nejako ma byt, ak si dobre pamatam... potom to treba zakomponovat do tvojho SQL

    sthruska je offline (nepripojený) sthruska

    sthruska
    Keď chceš mať len jedinečné odpovede, tak by som doplnil Flymaster riešenie ešte o

    WHERE count(cislo) = 1

    mlaco je offline (nepripojený) mlaco

    mlaco
    sthruska Pozri príspevok
    Keď chceš mať len jedinečné odpovede, tak by som doplnil Flymaster riešenie ešte o

    WHERE count(cislo) = 1
    Jedna otazka nemoze byt zodpovednana odpovedou, ktora bola uz pouzita na inu otazku. Pritom na niektore otazky pasuje viacero odpovedi, na inu menej, alebo ziadna. Potrebujem zistis ci je mozne "uspokojit" vsetky poziadavky.
    No a problem je ze nemozem n-krat (pocet otazok) joinovat tabulku odpovedi, lebo je prilis velka (desattisice).

    pawen je offline (nepripojený) pawen

    pawen
    skus toto:
    select aa.otazka, aa.odpoved from tabulka aa,
    (select otazka, count(*) as pocet from tabulka group by otazka) bb,
    (select odpoved, count(*) as pocet from tabulka group by odpoved) cc
    where aa.otazka=bb.otazka and aa.odpoved=cc.odpoved and bb.pocet=1 and cc.pocet=1

    alebo

    select aa.otazka, aa.odpoved from tabulka aa
    inner join (select otazka, count(*) as pocet from tabulka group by otazka) bb on
    bb.otazka=aa.otazka and bb.pocet=1
    inner join (select odpoved, count(*) as pocet from tabulka group by odpoved) cc on
    cc.odpoved=aa.odpoved and cc.pocet=1
    Robin ma pravdu. Musis detailne specifikovat strukturu, funkcionalitu a pozadovany vystup. Lebo rieseni moze byt nespocetne vela, ale pokial neupresnis podstatu nebude ziadne to prave orechove...


    1) Strukturu tabuliek (aspon podstatne stlpce, kluce, indexy a pod.)

    2) Vyznam skriptu:
    -ide len o overenie priradenia odpovede, alebo o zistenie ci je odpoved unikatna?
    -kedy a ako chces overovat odpoved? uz pri dotaze query na db (cize by sa vratil vysledok len platnych zaznamov), alebo az pri praci s retazcom v php?
    -takisto ako sa ma spravat skript ak dostane false odpoved. Pretypovat retazec, preskocit, zmazat a pod. Nezabudnut Group a Order a pod.

    3) Ako chces spracovat vystup z databazy? Pri chybe prerusit skript, vypisat len chybove hlasenie, alebo oznacit chybne polia spravou, alebo len vysledky nepouzit? Ide o vypis alebo o kontrolu? Ukladat vysledky do premennej, alebo do poli, alebo len vypisat?

    v prvom rade teda treba problem priblizit. Verim ze potom to nebude ziaden problem.
    V kazdom pripade pokial sa jedna o aktivny result odporucam jednoduchy ale presny dotaz na db a okamzite spracovavanie do poli a cykly. Mam s tym lepsie skusenosti a vysledky ako s casovo narocnymy dotazmi, alebo neustalym hladanim vo vsetkych riadkoch...

    SQL - priradovaci problem

    Porady, ktoré by vás mohli zaujímať

    Prihláste sa a sledujte len tie Porady, ktoré Vás zaujímajú.