Autor Zpráva
Suta
Profil
                      $dotaz_2 = MySQL_Query("
                          SELECT A.*, C.* FROM slovicka_nemecky A, slovicka_general C
                          WHERE A.id_slovicka_general = '".$vysledek[id]."' AND
                                C.id = '".$vysledek[id]."' AND
                                A.nemecky != '$nemecky'
                                ") or die($chybova_hlaska_spojeni_s_databazi);

// tabulka slovicka_general - podrobné info o německém slovíčku (id, mnozne_cislo, 2_pad atd.)
// tabulka slovicka_cesky - český název (české názvy!) německého slovíčka uvedeného v tabulce slovicka_general
// tabulka slovicka_nemecky - německý název slovíčka uvedeného v tabulce slovicka_general


Příklad:
v tabulce slovicka_general mám: id: 1, mnozne_cislo: Frauen, druhy_pad: Frau
v tabulce slovicka_nemecky mám: id_v_tabulce_general: 1, nemecky: bruder
v tabulce slovicka_cesky mám: id_v_tabulce_general: 1, cesky: žena

Použiji-li v této situaci sql příkaz uvedený výše, dostanu při výpisu ve slovníčku tento výsledek:
Frau: žena

Jak však vyřešit následující:

v tabulce slovicka_cesky mi přibude další název pro německé slovíčko uvedené v tabulce slovicka_general, jelikož Frau německy může být v češtině buď paní nebo žena;

nyní mám tedy v tabulce slovicka_cesky dva záznamy:

první záznam: id_v_tabulce_general: 1, cesky: žena
druhý záznam: id_v_tabulce_general: 1, cesky: paní

Při výše uvedeném sql příkazu pak dostávám tento výpis:
Frau: žena
Frau: paní

Čeho potřebuji dosáhnout je to, aby se z databáze vytáhl pouze jeden (první) záznam, Frau: žena

Díky za radu, jak sestrojit sql příkaz, zkoušel jsem s různým použitím DISTINCT, ale k ničemu jsem se nedobral...

PS: příklad mám zde.
Eddie
Profil
ak chces vytiahnut len jeden riadok pridaj na koniec sql dotazu toto:

LIMIT 1
Suta
Profil
Eddie
Špatně pochopeno, o to mi vůbec nejde, zkus si to přečíst znovu o co mi jde, myslím že jsem to napsal srozumitelně (ale možná se pletu, v opačném případě si napiš/te o upřesnění...).

Nechci vytáhnout jen jeden řádek, chci vytáhnou všechny řádky, ale má-li německé slovíčko uvedené v tabulce slovicka_general více významů = řádků/záznamů v tabulce slovicka_cesky, chci vytáhnout pouze první význam, a ostatní ignorovat.

A ještě vysvětlení na příkladu:
- příkaz mám dále složitější, po vytáhnutí záznamů z databáze procházím cyklem další "české" významy, takže výsledný html výpis (v případě více významů slovíčka) takovýto:

Frau: žena, paní

V této chvíli mi sql příkaz vypisuje následující:

Frau: žena, paní
Frau: paní, žena

(... což pochopitelně nechci ...)
nightfish
Profil
V této chvíli mi sql příkaz vypisuje následující:
Frau: žena, paní
Frau: paní, žena

to si nemyslím... dotaz vypíše všechny sloupce z tabulek slovicka_nemecky a slovicka_general, které odpovídají uvedeným podmínkám
takže by se asi hodilo vědět, co z toho dotazu skutečně leze (stačí relevantní sloupce, netřeba všechny)

pak se můžeme zamýšlet nad tím, co že vlastně chcete omezit
Suta
Profil
Vypisuje... Jen jsem nebyl zcela přesný ve formulaci, psal jsem, že kód mám složitější a ten že mi v této chvíli vypisuje to co jsem uvedl...
Nechtěl jsem zde dávat "delší" kód, tak tady je (opět zkrácený):

// sql dotaz - to je pro mě problematická část, kterou potřebuji upravit...
            $dotaz = MySQL_Query("
                SELECT A.*, C.*, D.*
                FROM slovicka_general A, slovicka_cesky C, slovicka_nemecky D
                WHERE
                      C.id_slovicka_general = A.id AND
                      D.id_slovicka_general = A.id
                      ORDER by $trideni_podle") or die($chybova_hlaska_spojeni_s_databazi);

          while ($vysledek = MySQL_Fetch_Array($dotaz))
            {
              $cesky = $vysledek[cesky];
              $nemecky = $vysledek[nemecky];
              $druhy_pad = $vysledek[druhy_pad_koncovka];
              $mnozne_cislo = $vysledek[mnozne_cislo_koncovka];
              $clen = $vysledek[clen];
              $nemecky_komplet = "$clen&nbsp;$nemecky&nbsp;<span class='mensi'>($druhy_pad, $mnozne_cislo)</span>";
              

// nyní hledám další české významy slovíčka, odděluji je čárkou...
                if ($_SESSION[mini_slovnicek_smer] == "nemecky_cesky")
                    { 
                      $dotaz_2 = MySQL_Query("
                          SELECT * FROM slovicka_cesky
                          WHERE
                                id_slovicka_general = '".$vysledek[id]."' AND
                                cesky != '$cesky' ")
                                or die($chybova_hlaska_spojeni_s_databazi);

                      while ($vysledek_2 = MySQL_Fetch_Array($dotaz_2))
                        {
// má-li německé slovíčko více významů, uložím je do proměnné...
                            $cesky .= ", ".$vysledek_2[cesky];
                        }
?>

// a tady už je jen výpis

<?echo "$clen&nbsp;$nemecky&nbsp;($druhy_pad, $mnozne_cislo)";?>
<?echo "<br />$cesky;?>
?>
<?  } ?>
Kajman_
Profil *
a nehledáte
select n.nemecky, group_concat(c.cesky) cesky
from slovicka_cesky c, slovicka_nemecky n
where c.id_slovicka_general=n.id_slovicka_general
group by n.nemecky
?
Suta
Profil
Kajman_
No jo, je to zvláštní, neboť "GROUP by" jsem zkoušel už dřív, a měl jsem za to že byl problém stále, teď už ale ne...
Díky moc!

Takže pro vyřešení problému stačilo k mému původnímu dotazu přidat
GROUP by slovicka_nemecky.nemecky

PS: ten group_concat slouží k čemu? Mimochodem zkoušel jsem i s různými úpravami, ale to vámi uvedené "group_concat(c.cesky) cesky" mi nějak PHP nechtělo vzít...
Alphard
Profil
ten group_concat slouží k čemu?
a manuál slouží k čemu?
Suta
Profil
Alphard
Byť programuji, angličtinu neovládám, jsem němčinář... Než jsem napsal předchozí příspěvek, přehledný popis příkazu group_concat v češtině jsem nikde nenašel, proto ten dotaz... Takže odkazem na anglický manuál jsi mi nepomohl, ovšem je logické, že jsi nemohl tušit moji slabou znalost angličtiny. Přesto díky, třeba někdy narazím na český popis.
Alphard
Profil
Suta
nemyslel jsem to nějak špatně, radil jsem dle pravidla, dáš rybu nebo naučíš rybařit
ta angličtina mě nenapadla

...nabízí funkce GROUP_CONCAT. Ta podobně jako ostatní agregační funkce vrátí pro každou skupinu vždy jen jednu hodnotu, konkrétně zřetězení jednotlivých prvků skupiny.
(http://php.vrana.cz/vypis-dat-ze-zavislych-tabulek.php#group_concat)
Suta
Profil
Alphard
Děkuju.

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