![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 20.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Za pomocą PHP tworzę taki mały sklep internetowy oparty na bazie mysql. Muszę zrobić żeby administrator mógł wejść na stronę na której będą mu się wyświetlać wszystkie zamówienia. Próbowałem to zrobić ale udało mi się tylko zrobić że pokazuje tylko jak ktoś kupi tylko jeden przedmiot ale jak ktoś już zakupi dwa lub więcej przedmiotów to pojawia się problem ;/ Przydatne informacje: 3 tabele:
- PRODUKTY w której mieszczą się kolumny idp, firma, model, idkat, cena i opis - PRODUKTY_ZAMOWIENIA w której mieszczą się kolumny idzamowienia, idp, cena_produktu, ilosc - ZAMOWIENIA w której mieszczą się idzamowienia, idklienta, wartosc, data, dos_nazwisko, dos_imie, dos_adres, dos_miasto, dos_kod_poczt. macie może jakieś propozycje co to pliku zobacz.php czyli tego co ma wyświetlać zamówienia. Może w ogóle macie jakieś lepsze rozwiązanie co do tych tabel jeżeli tak to proszę podzielcie się spostrzeżeniami ![]() Pozdrawiam, Adrian Ten post edytował adiseq 21.11.2011, 13:23:33 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 14 Dołączył: 25.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cześć!
Stworzyłeś, jak dla mnie, bardzo dziwne zapytanie. Najpierw pobierasz zawartość tabeli produkty_zamowienia, zliczas jej liczbę wierszy i dalej zakładasz, że taka sama liczba wierwszy będzie w tabelach produkty i zamowienia. Moim zdaniem powinieneś stworzyć następujące tabele: klienci (id, imie, nazwisko, adres itd.), produkty (id, nazwa, model, producent, opis itd.) oraz zamowienia (id, id_klienta, id_produktu, status_realizacji itd.). Następnie, na stronie administratora, musisz zacząć od wyświetlenia wszystkich zamówień, np:
Musisz teraz połączyć id_klienta z tabelą klienci i polem id oraz zamowienie z tabelą produkty i polem id. Możesz to zrobić za pomocą pętli, np. pobierasz wszystkie zamówienia, wyświetlasz je za pomocą pętli while, a następnie pobierasz iformacje o klience ustawiając LIMIT 1 w zapytanie i wyświetlasz wiersz, a następnie tworzysz kolejną pętlę z zamówieniami. Jednak ten sposób jest mało profesjonalny i pochłania dużo pamięci. Znacznie lepiej jest użyć funkcji JOIN, która służy do łączenia tabeli. I tak oto możemy połączyć ze sobą tabele zamowienia i klienci:
Powyższe zapytanie oznacza, że wybieramy wszystkie pola (SELECT *) z tabeli zamowienia oraz (INNER JOIN) klienci gdzie (ON) id_klienta z tabeli zamowienia jest takie samo jak id z tabeli klienci. Całe to zapytanie można wziąć teraz w nawias i używając polecenia AS nadać tak powstałem tabeli nową nazwę-alias, np. zamowienia_klienci:
Możemy uzyskać mniej więcej takie dane: id_produktu 1 - Jan Kowalski, id_produktu 2 - Jan Kowalski, id_produktu 3 - Adam Adamczyk, itd. Powstałą tabelę połącz z tabelą produkty, gdzie znajdzie się szczegółowy opis produktu:
Dzięki takiego zapytaniu otrzymasz wszystkie 3 tabele połączone w jedną całość. Poczytaj w necie trochę o MySQL JOIN. Jeśli takie zapytania są dla Ciebie zbyt skomplikowane, a strona sklepu nie jest oblegana przez setki klientów - możesz śmiało skorzystać z pętli, jak opisałem to wcześniej. Ten post edytował lukesh 21.11.2011, 04:18:18 -------------------- Edumemo.pl - Nauka Języków Obcych
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 20.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko dobrze do momentu jak mam zrobić
wywala mi wtedy błąd "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS zamow' at line 1" Ten post edytował adiseq 21.11.2011, 12:10:20 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 14 Dołączył: 25.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tutaj wywala błąd, bo to nie jest poprawne zapytanie, tylko fragment zapytania. Poprawne zapytanie jest w kolejnym punkcie. Zawsze na początku musisz mieć SELECT * FROM i dopiero później tabela, w tym wypadku w nawiasach podajemy połącenie () i nadajemy temu połaczeniu aliast za pomocą AS i robimy kolejne połączenie INNER JOIN.
-------------------- Edumemo.pl - Nauka Języków Obcych
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 20.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
a teraz kumam o co chodzi
![]() ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 07:49 |