Autor | Zpráva | ||
---|---|---|---|
Suta Profil |
#1 · Zasláno: 28. 3. 2008, 12:22:40 · Upravil/a: Suta
$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 |
#2 · Zasláno: 28. 3. 2008, 12:26:02
ak chces vytiahnut len jeden riadok pridaj na koniec sql dotazu toto:
LIMIT 1 |
||
Suta Profil |
#3 · Zasláno: 28. 3. 2008, 12:29:29 · Upravil/a: Suta
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 |
#4 · Zasláno: 28. 3. 2008, 12:56:17
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 |
#5 · Zasláno: 28. 3. 2008, 13:20:52 · Upravil/a: Suta
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 $nemecky <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 $nemecky ($druhy_pad, $mnozne_cislo)";?> <?echo "<br />$cesky;?> ?> <? } ?> |
||
Kajman_ Profil * |
#6 · Zasláno: 28. 3. 2008, 13:49:21
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 |
#7 · Zasláno: 28. 3. 2008, 14:17:06
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 |
#8 · Zasláno: 28. 3. 2008, 14:22:11
ten group_concat slouží k čemu?
a manuál slouží k čemu? |
||
Suta Profil |
#9 · Zasláno: 28. 3. 2008, 14:41:12
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 |
#10 · Zasláno: 28. 3. 2008, 14:50:23
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 |
#11 · Zasláno: 28. 3. 2008, 15:03:31
Alphard
Děkuju. |
||
Časová prodleva: 16 let
|
0