Autor Zpráva
leorond
Profil
Ahoj, mám tu jednu celkem jednoduchou otázečku ale rád bych se poradil zda to bude dobré řešení.

Mám 2 tabulky v MySQL do první ( Novinky ) se budou zapisovat dejme tomu id, nadpis, text, datum a do druhé ( obrazky ) se budou zapisovat uploadované obrázky například id, velikost, tip, nazev, id_id s tím že id_id ( obrazky ) = id ( Novinky ) a poté je vypíšu z DB podle shody zmíněných dvou zápisů. To znamená že bych porovnal obě tabulky a v případě shody id_id ( obrazky ) s id ( Novinky ) vypsal z DB data.

Jak přiřadit stejnou hodnotu id_id ( obrazky ) jako je id ( Novinky ) a jak by potom vypadal select?

Děkuji
Nuimi
Profil
Mě přijde že je to zbytečně složité místo id, id_id použij jmeno u obou a při ukládání do databáze jim prostě přiřadíš název toho souboru (obrázku), nebo to budeš mít v jednom php souboru a budeš jim přiřazovat 1 proměnou kterou si budeš automaticky generace (stačí funkce random)
mimochodec
Profil
leorond:
Jestli ten obrázek bude jeden, můžeš použít

SELECT novinky.nadpis, novinky.text, (..), obrazky.nazev, (..)
FROM novinky
LEFT JOIN obrazky ON obrazky.id_id = novinky.id

Pravděpodobnější ale je, že těch obrázků budeš mít v článku víc (jestli ne podle prvního návrhu, tak možná během dalšího vývoje), takže bych spíš udělal dva nezávislé selecty, jeden pro data článku, další pro obrázky, kde jen použiješ "... WHERE id_id = ".$idclanku.

V obou případech bych doporučoval sloupec id_id přejmenovat na id_clanku, ať se v tom vyznáš.

A jak správně upozornil zdejší zvýrazňovač, "text" je klíčové slovo, takže ten sloupec pojmenuj třeba "textclanku". Jde to i jinak, ale ten postup je zbytečně blbej.
leorond
Profil
samozřejmě se budou tabulky i sloupce jmenovat jinak jen mi jde o princip

Právě bych to chtěl mít vše v jednom souboru ( tedy kromě formuláře ) a jak jsi správně usoudil mimochodec tak jde o více obrázků, uploadovat soubory a zapsat do mysql je snadné ale možná by bylo nejlepší pomocí POST vkládat číslo které bude předvyplněné výpisem z DB například takto

Zjistím id posledního řádku v DB a zapíšu aby se vkládalo $posled_id_z_db+1, to by mohlo klapnout a bylo by to nejjednodušší řešení možná ne? Je to samozřejmě jen příklad mého nápadu.


Pokud se toto číslo vloží do obou tabulek tak by mělo být v každém případě totožné a za ten příklad výpisu děkuji Nuimi, něco takového jsem měl také na mysli.
Dan Charousek
Profil
leorond:
Hledáš mysqli_insert_id()

// psáno objektově:
# vložíme článek do db
$db->query("INSERT INTO clanky VALUES(...)");

# vložíme příslušné fotografie
$db->query("INSERT INTO fotografie(cesta, id_clanku) VALUES(..., " . $db->insert_id . ")");
leorond
Profil
No mám takovíto skript pro výpis jen z jedné tabulky stroje

<?
$ukaz    =    mysql_query("SELECT * FROM stroje WHERE kategorie = '1'");
if(mysql_num_rows($ukaz)==0) 
{ 
    echo "Novinka nebyla nalezena!";
}
else
{ 
    while ($ukaz_novinku=MySQL_Fetch_assoc($ukaz))
        echo "<table>
                    <tr><td>".htmlspecialchars($ukaz_novinku["id"])."</td></tr>
                </table>
                <table>
                    <tr><td>".htmlspecialchars($ukaz_novinku["tip"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["uvodka"])."</td></tr>
                </table>
                <table>
                    <tr><td>".htmlspecialchars($ukaz_novinku["valce"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["zdvi_objem"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["tip"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["kw"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["hp"])."</td></tr>
                </table>";
}
?>

a tabulku v MySQL upload_stroje ve které mám sloupec id_stroje které obsahuje číslo totožné s id v tabulce stroje, potřeboval bych aby se mi vypsal název správného obrázku místo $ukaz_novinku["id"]

Dokázal by mi s tímto někdo pomoci?
leorond
Profil
Jsem to ale nekňuba :D

SELECT kategorie,popis FROM stroje,upload_stroje WHERE id = id_stroje

nesmím mít duplicitní sloupec v tabulkách a JOIN použít vlastně ani nemusím :)


Ještě bych potřeboval udělat aby se mi z jedné tabulky vypsal pouze ten jeden konkrétní řádek a z druhé všechny řádky které odpovídají id z první tabulky
Mám tento kód

<?
$ukaz    =    mysql_query("SELECT * FROM stroje,upload_stroje WHERE id = id_stroje AND kategorie = '1'");
if(mysql_num_rows($ukaz)==0) 
{ 
    echo "Novinka nebyla nalezena!";
}
else
{ 
    while ($ukaz_novinku=MySQL_Fetch_assoc($ukaz))
        echo "<table>
                    <tr><td>".htmlspecialchars($ukaz_novinku["name"])."</td></tr>
                </table>
                <table>
                    <tr><td>".htmlspecialchars($ukaz_novinku["tip"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["uvodka"])."</td></tr>
                </table>
                <table>
                    <tr><td>".htmlspecialchars($ukaz_novinku["valce"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["zdvi_objem"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["tip"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["kw"])."</td></tr>
                    <tr><td>".htmlspecialchars($ukaz_novinku["hp"])."</td></tr>
                </table>";
}
?>



Nyní to totiž vypadá tak že při výpisu 1 řádku z stroje a 2 řádků z upload_stroje se mi vypíše výsledek jako 2 záznamy které se liší pouze v name.
mimochodec
Profil
leorond:
Jdeš na to špatně.
Jestliže máš na stránce jeden stroj a k němu několik fotek, použij dva dotazy, na sobě nezávislé.
Schamaticky:

SELECT id,x,y,z FROM stroje
while  { 
    echo stroje("x");

    SELECT filename FROM fotky WHERE idstroje =  stroje("id")
       while  { 
         echo fotky("filename");
      }

    echo stroje("y");
    echo stroje("z");
}
leorond
Profil
<?php
$result = mysql_query("SELECT * FROM stroje ORDER BY id");
while ($row = mysql_fetch_assoc($result)) {
    echo "<h3>$row[popis]</h3>\n";
    $result1 = mysql_query("SELECT * FROM upload_stroje WHERE id_stroje = '$row[id]'");
    while ($row1 = mysql_fetch_assoc($result1)) {
        echo "$row1[name]<br />\n";
    }
    mysql_free_result($result1);
}
mysql_free_result($result);
?>

Myslíš nějak takto?
Fisir
Profil
Reaguji na mimochodce:
Pouze podotknu, že z hlediska výkonnosti a rychlosti není žádoucí pokládat SQL dotazy v cyklu.
mimochodec
Profil
Tuhle syntaxi
echo "<h3>$row[popis]</h3>\n";
nemám rád a nepoužívám, takže nevím, jestli tam nemáš chyby, ale principielně to myslím přesně tak.
juriad
Profil
leorond:
Ano, takto. Pro diskusi o výkonu, jak zmiňuje Fisir, se podívej na Srovnání dotazů do závislých tabulek

Fisir:
Napřed to leorond musí být schopen alespoň nějak udělat, než se začne zabývat výkonem. Takto to je přehledné (ehm) a není to špatně.
mimochodec
Profil
Fisir:
To je pravda. Teď jasně nevidím, jestli leorond ten kód zamýšlí pro výpis více strojů, do kterého se má přidat ke každému stroji obrázek, nebo je to výpis informací o jednom rozkliknutém stroji. V druhém případě by to bylo v pořádku, v tom prvním bych spíš vyšel z #3 a jen to omezil na jednu nebo několik málo fotek.


juriad:
(ehm)

;-)
leorond
Profil
Samozřejmě ve finále bude echo jiné, vím že to bude pomalé ale potřebuji přiřadit například 10 řádků z jedné tabulky k 1 řádku v druhé.
Chci ale těch 11 řádků vypsat v 1 tabulce.


Sloučit tabulky se mi podařilo ale když udělám výpis tak se mi do tabulky zapíše pouze 1 a 1 řádek a hned pod to jde duplicita a 2 řádek


Tohle je přesně to co hledám jen bych to chtěl shrnout do jednoho dotazu aby to bylo podstatně rychlejší

<?php
$result = mysql_query("SELECT * FROM stroje ORDER BY id");
while ($row = mysql_fetch_assoc($result)) {
    echo $row["popis"];
    $result1 = mysql_query("SELECT * FROM upload_stroje WHERE id_stroje = '$row[id]'");
    while ($row1 = mysql_fetch_assoc($result1)) {
        echo $row1["name"];
    }
    mysql_free_result($result1);
}
mysql_free_result($result);
?>



No ale buď jsem blbej nebo se v tomhle prostě nevyznám, potřeboval bych vidět jak vypadají ty DB abych to dal dohromady :D

<?php
$result = mysql_query("
    SELECT *, Country.Name AS CountryName
    FROM (
        SELECT *
        FROM City
        ORDER BY ID
        LIMIT 10
    ) AS City
    INNER JOIN Country ON City.CountryCode = Country.Code
    INNER JOIN CountryLanguage ON City.CountryCode = CountryLanguage.CountryCode
");
$city_id = 0;
while ($row = mysql_fetch_assoc($result)) {
    if ($city_id != $row["ID"]) {
        echo "$row[Name] ($row[CountryName])\n";
        $city_id = $row["ID"];
    }
    echo "- $row[Language]\n";
}
?>

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: