Autor | Zpráva | ||
---|---|---|---|
luma64 Profil |
#1 · Zasláno: 28. 2. 2012, 10:46:11
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 |
#2 · Zasláno: 28. 2. 2012, 10:58:09
Nechápu otázku.
Tabulku v databázi nebo na webu? |
||
luma64 Profil |
#3 · Zasláno: 28. 2. 2012, 10:58:46
Tabulka je v db
|
||
Joker Profil |
#4 · Zasláno: 28. 2. 2012, 12:41:36
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 |
#5 · Zasláno: 28. 2. 2012, 13:02:24
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 |
#6 · Zasláno: 28. 2. 2012, 16:29:54
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 |
||
luma64 Profil |
#7 · Zasláno: 29. 2. 2012, 07:26:10
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 |
#9 · Zasláno: 2. 3. 2012, 12:12:05
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 |
#10 · Zasláno: 2. 3. 2012, 14:16:04
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. |
||
Časová prodleva: 12 let
|
0