Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> struktura bazy, sposob zapisu, nie wiem czy dobre rozwiazanie
AxZx
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


witam

mam przechowywac towary i uslugi w bazie
towar/usluga moze byc oferta lub potrzeba

tabele ulozylem tak (skrot)
Kod
id
nazwa
rodzaj (0 - oferta, 1 - potrzeba)


towar/usluga moze byc zarowno potrzeba jak i oferta, wiec jezeli jest tym i tym to beda 2 wiersze w bazie - tu juz mam watpliwosc czy jest to dobre rozwiazanie.

gdy zmieniam rodzaj towaru z oferty na potrzebe to usuwam poprzednie wpisy tego towaru i dodaje go na nowo ze zmienionym rodzajem - tu kolejna watpliwosc.

wymyslilem teraz ze moze zmienic tabele na:
Kod
id
nazwa
oferta ( 0 - nie oferta, 1 - oferta)
potrzeba ( 0 - nie potrzeba, 1 - potrzeba)

czyli jezeli towar jest oferta i potrzeba to ma dwie jedynki.

tylko ze powstaje pytanie jak wyswietlic towar jezeli jest oferta i potrzeba w dwoch wierszach?
np
naprawa komputerów - oferta
naprawa komputerów - potrzeba

czy mysql cos takiegio potrafi?
i prosze o ogolna wypowiedz na temat obu rozwiazan, ktore lepsze?


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
wijet
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Drugi sposób wydaje mi się lepszy ale w przypadku(mniej rekordow). A wyswietlanie w sposob
Cytat
tylko ze powstaje pytanie jak wyswietlic towar jezeli jest oferta i potrzeba w dwoch wierszach?
np
naprawa komputerów - oferta
naprawa komputerów - potrzeba


robisz przez dwa zapytania poloczone UNION w jednym wybierasz te z "oferta" w drugim rekordy z "potrzeba" i wszystko sortujesz np. nazwie.


--------------------
Go to the top of the page
+Quote Post
AxZx
post
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


a moze taka tabela:

id
nazwa
rodzaj

rodzaj moze byc
1 - oferta
2 - potrzeba
3 - oferta i potrzeba

juz baza bylaby mniej nadmiarowa.
tylko teraz tez nie wiem jak wyswietlic 2 wiersze jezeli rodzaj == 3


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
wijet
post
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Wyswietlasz tak jak pisalem wcześniej
  1. (SELECT * FROM tabelka WHERE rodzaj = 1 OR rodzaj = 2) UNION (SELECT * FROM tabelka WHERE rodzaj = 3)
  2. ORDER BY tabelka.nazwa;


EDIT
@nospor
Tak faktycznie, zle napisalem.

Ten post edytował wijet 25.09.2006, 15:47:25


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@wijet akurat Twoj sposob, gdy rodzaj = 3, wyswietli ten rekord tylko raz. przeanalizuj se to jeszcze raz winksmiley.jpg

Przy tych wartosciach wyszla ladnie suma bitowa, mozna wiec tak:
  1. (SELECT * FROM tabelka WHERE rodzaj & 1) UNION (SELECT * FROM tabelka WHERE rodzaj & 2)


lub w php to przerobic, ze jesli rodzaj =3, to dany rekord wyswietlic dwukrotnie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post
Post #6





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


ani jedno ani drugie rozwiazanie nie zadzialalo
w php nie chce tego obrabiac, wole na poziomie bazy.

wyswietla tak samo jak jeden select, nie robi z jednego dwoch wierszy.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
sf
post
Post #7





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


towary
id
nazwa

statusy_towarow
id
status

towary_posiadaja_statusy
id_towaru
id_statusu


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
AxZx
post
Post #8





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


tak, to by bylo chyba najdoskonalsze rozwiazanie jesli chodzi o mysql. w php to troche wiecej roboty:)

dzieki
przemysle to


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@AxZx moj przyklad nie zadzialal, gdyz union domyslnie ma ustawione usuwanie duplikatow. wystarczy tylko dopisac ALL i bedzie git:
  1. (SELECT * FROM tabelka WHERE rodzaj & 1) UNION ALL (SELECT * FROM tabelka WHERE rodzaj & 2)

smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post
Post #10





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


o widzisz, czlowiek uczy sie cale zycie:) dzieki

a dalsza czesc mojego problemu?
zamiana tor_rodzaj z 3 na 1 a w drugim wierszu na 2
to tez jest takie proste?smile.gif
czy moze lepiej odrazu zaczac zmieniac baze tak jak napisal sf


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
dalsza czesc mojego problemu?
zamiana tor_rodzaj z 3 na 1 a w drugim wierszu na 2
to tez jest takie proste?
ALe wczesniej sie oto nie pytales.
Wczesniej sie pytales, jak zmienic z jednego rodzaju na drugi w ramach jednego rekordu, a tu nagle schizofremii dostales i jeden rekord chcesz na dwa rozbijac w sensie zmian statusow. W tym ostatnim pomysle to nawet struktura sf ci nie pomoze, gdyz jego struktura tez sie odnosi do jednego rekordu.

Jesli jednak chcesz miec dwa rekordy, to zrob dwa rekordy i nie kombinuj. Na chwile obecna nie jestem w stanie ci inaczej pomoc, bo nie wiem juz oco ci chodzi. a ty wiesz? smile.gif

ps: albo to ja jestem juz spiacy i nie widze prostoty twego problemu.... tak czy siak rozwin swoją mysl, proszę.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post
Post #12





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


wcale nie mowie ze moj pomysl jest prosty smile.gif
wlasciwie to bede musial sie zastanowic czy takie cos wogole jest mi potrzebne
bo moge poprostu wyswietlic ten jeden rekord i napisac obok oferta/potrzeba

chce z jednego wiersza zrobic dwa:)
zamiast
1 nazwa_towaru 3 (gdzie 3 to rodzaj)
zeby wypisal
1 nazwa_towaru 1
1 nazwa_towaru 2
ot tyle:)
z rozwiazaniem sf byloby chyba latwiej kombinowac.
ale jezeli mysql ma taka mozliwosc to chcialbym z niej skorzystac.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




o, teraz gadasz po ludzku winksmiley.jpg

  1. (SELECT nazwa_towaru, IF(rodzaj=3,1,rodzaj) FROM tabelka WHERE rodzaj & 1)
  2. UNION ALL
  3. (SELECT nazwa_towaru, IF(rodzaj=3,2,rodzaj) FROM tabelka WHERE rodzaj & 2)

smile.gif

ps: a teraz ide spac, dobranoc 4 all smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post
Post #14





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


no no smile.gif
wyniki dobre

dzieki bardzo

hmm tylko jak policzyc ile tych wynikow jest?
count(*)?


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




chcesz i wyswietlac i znac ich ilosc?
http://pl.php.net/manual/pl/function.mysql-num-rows.php

co do count(*) to zaprzeproszeniem zamiast sie "glupio" pytac to bys sprobowal to wstawic i sprawdzil.... tongue.gif
ja sprawdzielm i dziala winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sf
post
Post #16





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Osobiście staram się unikać uni bo to takie hm rozwiązanie naookoło mi się wydaje - stosuje tylko gdy poprostu mam już gotową strukturę bazy danych i nie mogę jej zmienić.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@sf ja tam rownież w praktyce nigdy nie korzystalem z union.
Jakos mi to nigdy nie bylo potrzebne, a i tutaj tez nie jest, ale jak sie AxZx uwzial, to niech ma winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post
Post #18





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


no wcale sie nie uwzialem, tylko pytam jak by to mozna bylo zrobic.
jezeli znasz jeszcze inne rozwiazanie to chetnie sie zapoznam:)

a co do count to nie wiem jak sprawdzic, dac count to kazdego zapytania?


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
jezeli znasz jeszcze inne rozwiazanie to chetnie sie zapoznam
Juz ci mowilem, ja bym ten rekord rozmnozyl w php smile.gif

Cytat
a co do count to nie wiem jak sprawdzic, dac count to kazdego zapytania?
A tu sie klania tez to co mowilem wczesniej: sprawdz, anie sie pytasz, az tak duzo kombinacji nie masz tongue.gif
tak, do kazdego zapytania smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post
Post #20





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


okej, postanowilem i zabralem sie za zmiany.
zmienilem juz czesc aplikacji, wg schematu sf - czyli tak jak ma byc normalnie:)
tylko ze mam problem, ktory zreszta kiedys juz sie pojawil tylko omijalem go w brzydki sposob (nawet nie pamietam juz jak).

przykladowa sytuacja:
uzytkownik moze edytowac swoje towary, wiec ma ich spis, chcialbym mu pokazac ktory towar jest oferta ktory potrzeba a ktory tym i tym.

ale tutaj juz nie chcialbym zeby sie powtarzaly te same wiersze, chcialbym zeby to wygladalo mniej wiecej tak:
Kod
jakas nazwa_towaru | oferta potrzeba | jakas data_dodania
jakas nazwa_towaru2 | potrzeba | jakas data_dodania
jakas nazwa_towaru3 | oferta | jakas data_dodania
jakas nazwa_towaru4 | potrzeba | jakas data_dodania
jakas nazwa_towaru5 | oferta | jakas data_dodania


chodzi o to jak przekazac to ladnie do szablonu Smarty
bo teraz przekazuje normalnie towary tego usera. ale zeby sprawdzic czy to jest oferta czy potrzeba to musze miec id tego towaru, a w smarty musialbym uzyc php zeby utworzyc nowe zapytanie.

czy musze dla kazdego towaru robic osobne zapytanie pobierajace czy to jest oferta czy potrzeba?
czy moze da sie jakos to polaczyc w mysql zeby wynik byl gotowy do wstawienia w szablonie?

teraz to w php polaczylem i przekazalem do smarty gotowa tablice.
ale jak user bedzie mial 1000 towarow to bedzie dodatkowych 1000 zapytan dla kazdego towaru zeby sprawdzic jaki to rodzaj jest.

cos takiego by sie przydalo:
  1. SELECT *, concat((SELECT rodz_nazwa FROM rodzaje)) AS rodzaj FROM towary


sa jakies inne funkcje ktore moglyby cos takiego zrobic?

Ten post edytował AxZx 26.09.2006, 11:10:20


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 05:08