Autor Zpráva
luma64
Profil
Zdravim, chcem poprisit o pomoc. Mam tabulku so stlpcami ico,dodavatel...Ten sa vsak vyskytuje viackrat, vzdy ma to iste ico, preto treba roletu vytvorit tak, ze najprv sa urobi distinct na ico a potom nad tymto selectom sa vytvori roleta na meno. Viete mi pomoct ? Vdaka.
Joker
Profil
Nechápu otázku.
Tabulku v databázi nebo na webu?
luma64
Profil
Tabulka je v db
Joker
Profil
Aha, čili problém je v tom, že údaje o dodavateli jsou duplikované (tzn. když jsou třeba 4 záznamy o dodavateli, jsou v tabulce 4x jeho kompletní údaje)?

Pak jde o chybný návrh databáze.
Správné řešení je zavést tabulku pro dodavatele a v té první tabulce místo kompletních údajů mít jen klíč do tabulky dodavatelů (třeba IČO).

Získat seznam dodavatelů je pak triviální, je to jednoduchý SELECT z tabulky dodavatelů (případně kde stav je aktivní, nebo podobná podmínka).
luma64
Profil
Praveze, to ze su dodavatelia duplikovani ni je chyba. Totiz mam 5 skupin uzivatelov, kazda si vytvara dodavatelov samostatne a tito sa im zobrazuju. Dalsia skupina ale robi nad vsetkymi dodavatelmi, teda teoreticky sa jej nejaky moze vyskynut 5x.
Joker
Profil
luma64:
To pořád neznamená, že ten návrh je správně.

Jestli je to správně lze ověřit snadno: Když si z těch 5 skupin uživatelů každá přidá jednu a tu samou firmu, půjde o pět nezávislých záznamů?
→ NE: Návrh databáze je špatně.
→ ANO: Dotaz z příspěvku [#1] nedává smysl. Když budou v tabulce hodnoty například:
   IČO   | Skupina| název
12345678 |    1   | ACMA
12345678 |    2   | ACME
12345678 |    3   | ACMI
12345678 |    4   | ACMO
12345678 |    5   | ACMU
Jaký název dodavatele by se měl zvolit?
luma64
Profil
Urobil som to tak, ze unikatne selektujem nazov firmy a do rolety vytvaram nazov s spolu s ico ho zapisem v rolete spolu s oddelovacom |, teda nazov|ico. Potom to cez explode roztrhnem a mam to. Ma to este tu vyhodu, ze mam firmu slovensku a cesku, maju samozrejme rozne ico, a takto uzivatel vidi aj firmu aj ico.
Joker
Profil
luma64:
unikatne selektujem nazov firmy
Takže dvě firmy se stejným názvem budou jedna?
Kdyby někdo vložil do systému třeba firmu Apple Corps Ltd. pod jménem Apple a někdo jiný Apple Inc. pod jménem Apple, objeví se v seznamu jen jeden z nich?
A naopak když tutéž firmu zadá víc uživatelů s různými zvyklostmi, bude seznam dodavatelů vypadat asi jako ukázka níže?
Novák, s.r.o. (IČO 12345678)
Novák s.r.o. (IČO 12345678)
Novák sro. (IČO 12345678)
Novák (IČO 12345678)
luma64
Profil
Predpoklad je, ze ˇmaju rovnake ičo (12345678) ale su to 2 rozne dcery (); roleta teda vyzera takto:
Apple Corps Ltd |1111111
Apple Inc. |1111111

<!--   Dodavatel   -->
    <?php 
    
        $cpquery = "Select distinct(dodavmeno),dodavico from dodavatel d where d.platny='A' order by dodavmeno";
        $cpresult = mysql_query($cpquery) or die(mysql_error());
    ?>
        <p>Dodavatel:
        <select name="dodavatel">
        <!-- Drop down -->
    <?php
        while($row = mysql_fetch_array($cpresult))
        {
         $napln=$row['dodavmeno'].'|'.$row['dodavico'];
        echo '<option value="' .$napln. '">'. $napln. '</option>'  ;
        
        }
    
        echo "<option value='dodavatel'></option>";
        echo "</select>";
        //<!-- Koniec drop down DODAVATEL-->

Potom cez explode to roztrham a ziskam meno a ičo a podla mena ziskam adresu; podla ico nemozem, lebo to sa opakuje
Joker
Profil
luma64:
S tím Apple mi nešlo o stejné IČO, ale o stejné jméno. Jsou to úplně rozdílné firmy, ale kdyby obě v systému byly jako „Apple“, nebude to fungovat.

Podle mě je uvedený návrh prostě špatně z několika důvodů:
1. Řeší se vlastně to, jak z výpisu odfiltrovat duplicitní záznamy. Ve skutečnosti hlavní problém je, že takové záznamy vůbec existují, tzn. že reálně totožná vlastnost je v tabulce uložena na více různých místech. Jedné reálné položce (dodavateli) by měl odpovídat jeden záznam v databázi, jasně identifikovaný primárním klíčem.
2. Z 1. vyplývá několik problémů, které jsem už zmínil.
3. Místo použití klíče z databáze si kód v [#9] vytváří vlastní identifikátor, který zase není klíč v databázi. Už to je známka, že něco je špatně. Navíc název firmy je dost nevhodný identifikátor: V první řadě není unikátní (víc firem se může jmenovat stejně), dál je to text proměnné délky v nějakém jazyce, takže se s ním bude blbě pracovat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: