• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Relacja zamówień MySQL - przechowywanie własnych zestawów

Object Storage Arubacloud
0 głosów
253 wizyt
pytanie zadane 11 stycznia 2016 w SQL, bazy danych przez babiak Obywatel (1,810 p.)
Witam,

pierwszy raz spotykam się z takim problemem i nie bardzo wiem jak sobie z tym poradzić. Otóż:

Załóżmy, że mamy prostą bazę danych w której przechowujemy gotowe zestawy kredek do kupienia :) Dla przykładu 3 rekordy:

ID, nazwa, sklad_zestawu

1, mały, biała, czarna

2, średni, biała, zielona, czerwona, niebieska, czarna

3, duży, biała, zielona, czerwona, żółta, niebieska, czarna, fioletowa, pomarańczowa

 

Osoba zamawiająca produkt (w tym przypadku utworzony już wcześniej zestaw) wybiera wśród gotowych zestawów i nie ma możliwości stworzenia własnego zestawu. Dlatego powstał pomysł by zrobić bazę kredek (lista poniżej) i dzięki tej liście będzie można generować własny skład zestawu.

ID, nazwa

1, biała

2, czarna

3, czerwona

4, niebieska

5, fioletowa

itd...

Dzięki temu klient zamawiający może wygenerować swój własny zestaw. I nie ma potrzeby tworzenia za kogoś wszystkich opcji zestawów.

 

Moje pytanie tylko brzmi jak przechowywać w bazie takie zamówienia? Tak?:

ID, klient, zestaw

1, michał, 1;2;3

 

Da się teraz wyświetlić skład zestawu na stronie wyświetlić poprzez zapytanie MySQL? (w tym sensie, że id kredek czyli 1, 2, 3 są w jednej kolumnie). Czy może dopiero w skrypcie PHP będzie trzeba użyć funkcji Explode i sprawdzać co kryje się pod 1, potem pod 2, potem pod trójką.

 

A może jeszcze inaczej zrobić. Ograniczyć zestaw do maksymalnie do 7 kredek i wtedy zrobić 7 kolumn w tabeli z zamówieniami, a w każdej kolumnie zapisywać osobną kredkę z zestawu. czyli np. Michał zamawiający 3 kredki wypełnił by tabele zamówień następująco - id, login, 3 wybrane kredki, reszta pól pusta:

id, klient, kr1, kr2,kr3, kr4, kr5, kr6, kr7

1, michał, 1, 2, 3, , , , ,

 

Bo ta relacja wydaję mi się zrozumiała ale dużo pustych pól może zostawać stąd moje pytanie. Może jest jakiś sposób na pogodzenie trzymania tych id (kluczy) w jednej kolumnie z zachowaniem relacji.

Proszę o pomoc i wielkie dzięki za wszelkie sugestie!

3 odpowiedzi

+1 głos
odpowiedź 11 stycznia 2016 przez jaca121212 Nałogowiec (40,760 p.)

Ja bym zrobił to tak tylko i z poziomu  php  sprawdził który kolor został wybrany  i zapisał do bazy danych 

 

I można by było w bazie zapisać kolor który został wybrany rekord w bazie wyglądałby mniej więcej tak:

id>klient>kolor 1 kolor 2 kolor 3 ...

wtedy nie trzeba robić osobno  tabeli dla kolorów 

<h1>Twój zestaw kolorów</h1>

<form method="post">
    <div>
        <input type="checkbox" name="kolor_1" > <label for="option-1">kolor 1</label>
    </div>
    <div>
        <input type="checkbox" name="kolor_2" > <label for="option-2">kolor 2</label>
    </div>
    <div>
        <input type="checkbox" name="kolor_3" id="option-3"> <label for="option-3">kolor 3</label>
    </div>
    <div>
        <input type="checkbox" name="kolor_4" > <label for="option-4">kolor 4</label>
    </div>
    <div>
        <input type="checkbox" name="kolor_5" > <label for="kolor_5">kolor 5</label>
    </div>
    
    <div>
        <input type="submit" name="wyslij" value="kup taki zestaw">
    </div>
</form>


if(isset($_POST['wyslij']){
$kolor_1 = "czarny";
$kolor_2 = "czerwony";
$kolor_3 = "zielony";

if empty($kolor_1){

}else{
Dodajemy do bazy kolor;
}elseif empty($kolor_2){

}else{
Dodajemy do bazy kolor;
}elseif empty($kolor_3){

}else{
Dodajemy do bazy kolor;
}

}

Nie wiem  czy dobrze jest to zrobione.

komentarz 11 stycznia 2016 przez babiak Obywatel (1,810 p.)
Mi chodzi głównie o to jak zachować te relację w jak najlepszej kondycji. Bo mi dosłownie nie chodzi i robienie zestawu kredek spośród 10 kolorów, a coś grubszego kalibru.

Bo weź wyobraź sobie, że ten przykładowy zestaw kredek, który właśnie utworzyłeś jest od tej pory "czymś nierozłącznym". Stworzyłeś z tych "kredek" coś - i teraz chcesz wyświetlić np w historii zamówień jaki zestaw sobie ktoś wymyślił. Ale trzymając w jednej kolumnie "zestaw" np "1;2;3" to nie mówi userowi jaki zestaw sobie kiedyś utworzył. Stąd moje pytanie. Trzymać coś takiego właśnie w jednej kolumnie w tym formacie "1;2;3", a potem dalej w PHP funkcją explode powyciągać pojedyńcze ID i pokazać co się za tym kryję. A może robić 7 kolumn? Nie bardzo wiem, więc czekam za opinią innych.

Inna sprawa jest taka, że nie może to być na zasadzie jak w bibliotece gdzie osoba wypożyczająca 3 książki tworzy 3 rekordy w bazie danych.

Czyli:

ID, klient, ksiazka

1, 10, 17

2, 10, 40

3, 10, 98
+1 głos
odpowiedź 13 stycznia 2016 przez mowmiheniek Stary wyjadacz (11,900 p.)

Ja bym zrobił tak.

Klient może sobie wprowadzić nazwę zestawu i później wyszukiwać po nazwie. 

komentarz 14 stycznia 2016 przez babiak Obywatel (1,810 p.)
Coś w ten deseń zrobiłem właśnie. Wielkie dzięki!
0 głosów
odpowiedź 11 stycznia 2016 przez Frendom Pasjonat (18,900 p.)
Zacznijmy od tego ze wartosci w polach nie powinny wystepowac po przecinkach. Chodzi tutaj o normalizacje bazy aby byla ona rozbita na jak najwiecej elementow. Wiec rozboj wszystko w swojej bazie na jeszcze wiecej tabel. Co do zamowienia (id klient zestaw). Tutaj beda przechowywane same id, nic wiecej. Id zamowienia-wiadomo. Id klienta powinno byc zaciagane z tabeli klienci. Id zestawu powinno byc pobierane z nowej tabeli zestawy, w ktorej mamy id, nazwe przedmiotu, grubosc i tak dalej czego chcemy. Gdybym byl na kompie to troszeczke dokladniej bym ci to rozpisal albo jakas grafike wstawil :P
komentarz 11 stycznia 2016 przez babiak Obywatel (1,810 p.)
No tak mi się wydaję, że nie powinny występować po przecinku ale jak zastosować tu tą normalizację bazy i wszystko jeszcze bardziej rozbić na czynniki pierwsze jak mam akurat taką potrzebę by to co on wybrał w tym danym zestawie było jako jedność. Chętnie spojrzę na grafikę albo na bardziej szczegółową rozpiskę.
komentarz 11 stycznia 2016 przez Frendom Pasjonat (18,900 p.)
Zacznij od tego co ma byc w zestawie. Jezeli maja byc nazwy kolorow kredek to zrob osobna tabele z kolorami. Jezeli ma byc grubosc kredki to tez zrob do tego osobna tabele gdzie bedziesz tylko te dane przetrzymywal. Wtedy w tabeli zestaw w kazdym rekordzie bedziesz przechowywal same id rzeczy, ktore wybral sobie klient. A w zamowieniach id do tego wlasnie zestawu

Podobne pytania

0 głosów
1 odpowiedź 828 wizyt
pytanie zadane 25 marca 2016 w SQL, bazy danych przez babiak Obywatel (1,810 p.)
0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 9 sierpnia 2019 w Sieci komputerowe, internet przez DanJ93 Użytkownik (860 p.)
0 głosów
1 odpowiedź 144 wizyt
pytanie zadane 8 marca 2017 w SQL, bazy danych przez niezalogowany

92,620 zapytań

141,474 odpowiedzi

319,813 komentarzy

62,004 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...