Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
Zdravim,
mam problem pri zobrazeni z databazy udajov ak je v DB rovnaky autor k viacerym polozkam mam v DB 3 tabulky: autor prednaska autor_prednaska vypis: SELECT pd.*, pd.name_prednaska name_prednaska, aut.name_autor name_autor FROM prednaska pd LEFT JOIN autor_prednaska ap ON ap.id_prednaska = pd.id_prednaska LEFT JOIN autor aut ON aut.id_autor = pd.id_prednaska Kde autor: id_autor name_autor prednaska: id_prednaska name_prednaska a dolezita tabulka na spojenie oboch autor_prednaska: id_prednaska id_autor Urobil som to takto, nakolko niektore prednasky mozu mat viac autorov, pokial by bol vzdy len jeden dal by som to info o id_autor priamo do tabulky prednaska. / neviem, ci som to takto rozdelil dobre, ak je ina moznost, sem s nou/ mam v DB 5 roznych zaznamov v tabulke prednaska zo 4 roznymi autormi, jeden autor patri k dvom prednaskam a 2 autory k jednej prednaske Ked dam vypis podla kodu vyssie, tak mi zobrazi pekne ID prednasky, nazov prednasky a meno autora len v prvych 4 zaznamov. ten predposledny a posledny da id aj nazov prednasky, len meno autora je prazdne /null/ ... Je to 2 prednaska toho isteho autora. Ako docielit toho aby sa mi aj to meno zobrazilo u tej prednasky. Pravdepodobne mi kod funguje len ked je to unikatny zaznam? Moze sa mi niekto na to pozriet? Plus ako potom zobrazit ak je v tabulke autor_prednaska 2 zaznamy z rovnakou prednaskou, ale s nym id_autor, aby som mohol k tej ktorej ... POtrebujem vypisat len unikatne prednasky a k nim autorv co patria, ak je viac autorov, tak vypisat aj ich .. dal som to aj sqlfiddle... sqlfiddle.com/#!9/f82a6b/1 Dakujem |
||
tttttttt Profil * |
#2 · Zasláno: 20. 6. 2020, 22:46:33
Na posledním řádku je špatně podmínká v JOINU, má být
LEFT JOIN autor aut ON aut.id_autor = ap.id_autor
|
||
Andrej.B Profil |
tttttttt:
ach jaj. Toto nieje mozne :) diky Je este nejako mozne si tie posledne 2 riadky naformatovat tak, aby som videl len jednu s dvoma autormi? Ci budem musiet dat este jeden SELECT na autorov vo vnutri predchadzajuceho cyklu? Inak je to dobra uvaha mat to rozdelene tak ako to mam ja s tou pomocnou tabulkou autor_prednaska? Ci sa to robi nejako inak este? |
||
Andrej.B Profil |
#4 · Zasláno: 21. 6. 2020, 09:50:50
SELECT pd.name_prednaska, GROUP_CONCAT(aut.name_autor) AS meno FROM prednaska pd INNER JOIN autor_prednaska ap ON pd.id_prednaska = ap.id_prednaska INNER JOIN autor aut ON ap.id_autor = aut.id_autor GROUP BY pd.name_prednaska ORDER BY name_prednaska DESC tak sa mi podarilo to urobit cez INNER JOIN ... Uz len prist na to, aby to bolo naformatovane a klikatelne, hlavne tych autorov ak su takto za sebou... ak ma niekto podobny problem tak odkaz na sqlfiddle snad pomoze ... sqlfiddle.com/#!9/f82a6b/60 |
||
Andrej.B Profil |
#5 · Zasláno: 21. 6. 2020, 12:15:20
Este mi nejdu zobrazit klikatelnych autorov...
Nizsie kod ako sa snazim dostat z toho SELECTU autora a jeho ID, ked vysledok mam ako meno, meno / id,id $array2 = explode(',', $row['idmeno']); foreach ($array2 as $item2) { echo '<a href="/autor/'; echo $item2; echo '">'; $array = explode(',', $row['menoAutor']); foreach ($array as $item) { echo $item; } echo "</a>\n";} Zobrazi mi: <a href="/autor/4">Grygar JiříKulhánek Petr</a> <a href="/autor/3">Grygar JiříKulhánek Petr</a> <a href="/autor/4">Grygar Jiří</a> <a href="/autor/3">Kulhánek Petr</a> Dakujem |
||
blaaablaaa Profil |
#6 · Zasláno: 21. 6. 2020, 12:32:44
Andrej.B:
Co to udělat ve dvou dotazech? V jednom vytáhneš přednášky a ve druhém autory podle id všech přednášek a doplníš si je do pole přednášek. |
||
Kajman Profil |
#7 · Zasláno: 21. 6. 2020, 15:12:49
Andrej.B:
Srovnání dotazů do závislých tabulek |
||
Andrej.B Profil |
#8 · Zasláno: 21. 6. 2020, 16:37:52
Tak som to prerobil na dotazy 2... nieje to take pekne ako v tom jednom, ale funguje ako ma, teda zatial na datach, ktore mam k dispoziici. Tazky zivot :)
Je to mozne este nejako inak? Lepsie? Diky Kajman: cize je to najpomalsie ak som pochopil... <?php echo "<h5>Poslednych 10 prednášok</h5>\n"; $result_prednaska = $conn->query(" SELECT pd.name_prednaska, pd.id_prednaska, ap.id_autor FROM prednaska pd INNER JOIN autor_prednaska ap ON pd.id_prednaska = ap.id_prednaska GROUP BY pd.name_prednaska ORDER BY name_prednaska DESC "); while ($row_prednaska = $result_prednaska->fetch_array()) { echo $row_prednaska['id_prednaska']; echo ' - '; echo '<a class="text-dark" href="/prednaska/'; echo $row_prednaska['id_prednaska']; echo '/">'; echo $row_prednaska['name_prednaska']; echo '</a>'; echo ' - '; echo "\n"; $result_autor = $conn->query(" SELECT ap.id_prednaska, au.id_autor, au.name_autor FROM autor_prednaska ap LEFT JOIN autor au ON ap.id_autor = au.id_autor WHERE ap.id_prednaska = ".$row_prednaska['id_prednaska']." "); while ($row_autor = $result_autor->fetch_array()) { echo '<a class="text-dark" href="/autor/'; echo $row_autor['id_autor']; echo '">'; echo $row_autor['name_autor']; echo "</a>\n"; } $result_autor->close(); echo " <br>\n "; } $result_prednaska->close(); |
||
Kajman Profil |
#9 · Zasláno: 21. 6. 2020, 16:42:37
Ano, použil jste výkonově nejhorší řešení. Navíc to nebude fungovat s dvěma stejně nazvanými přednáškami.
|
||
Andrej.B Profil |
#10 · Zasláno: 21. 6. 2020, 17:03:37
Kajman:
tak ako to potom dorobit naprilad z tej vyber z 3 tabuliek - viac autorov na jednu prednasku kde mi chyba len to rozdelenie a preklik na autorov, kedze v dalsom kroku mi to nechce fungovat , alebo je aj to nie dobre riesenie? |
||
blaaablaaa Profil |
#11 · Zasláno: 21. 6. 2020, 18:07:47
Andrej.B:
Tak jako to je v odkazu od Kajmana v sekci "Konstantní počet dotazů" - tedy si nejdříve vytáhnout přednášky a uložit je do pole s klíčem id. V druhém dotazu (mimo cyklus) vybrat všechny autory přednášek kde je id přednášky některé z těch z prvního dotazu a doplnit je do pole s přednáškami podle id. V třetím cyklu projdeš přednášky a vypíšeš je (i s autory). |
||
Andrej.B Profil |
#12 · Zasláno: 22. 6. 2020, 12:24:30
blaaablaaa:
Tak to je uz vyssi divci pre mna... Skusil som presne ist podla toho navodu od Jakuba a aj som stiahol databazu World, ze tos kusim prerobit na novsiu verziu SQL ako je tam, ale je to prilis zlozite... Osobne som si chcel konecne po rokoch urobit poriadok v audioknihach a prednaskach, ze si spravim jednoduchu a rychlu aplikaciu.. Ale ako vzdy to dopada, ze to nebude ani jednoduche ani rychle a mal som zostat pri Exceli :) Zatial to necham na tych samostatnych dotazoch a ak bude cas a chut skusim to prerobit. Nakolko ma rychlost teraz moc netrapi a je to pre par nadsencoch do audia. Urcite sa este ozvem s problemamy na tomto projekte. Tu sa mi vzdy dostalo pomoci. Dakujem |
||
Časová prodleva: 4 roky
|
0