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 *
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
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
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>
ale potreboval by som:

<a href="/autor/4">Grygar Jiří</a>
<a href="/autor/3">Kulhánek Petr</a>

Dakujem
blaaablaaa
Profil
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
Andrej.B:
Srovnání dotazů do závislých tabulek
Andrej.B
Profil
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
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
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
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
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

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