| 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: 6 let
|
|||
0