Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wczytywanie rekordów - pomocy
Forum PHP.pl > Forum > Bazy danych > MySQL
adiseq
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 smile.gif

Pozdrawiam,
Adrian
lukesh
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:
  1. SELECT * FROM zamowienia WHERE status_realizacji='niezrealizowane'

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:
  1. SELECT * FROM zamowienia INNER JOIN klienci ON zamowienia.id_klienta=klienci.id

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:
  1. (SELECT * FROM zamowienia INNER JOIN klienci ON zamowienia.id_klienta=klienci.id) AS 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:
  1. SELECT * FROM (SELECT * FROM zamowienia INNER JOIN klienci ON zamowienia.id_klienta=klienc.id) AS zamowienia_klienci INNER JOIN produkty ON zamowienia_klienci.id_produktu=produkty.id

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.
adiseq
Wszystko dobrze do momentu jak mam zrobić
  1. (SELECT * FROM zamowienia INNER JOIN klienci ON zamowienia.id_klienta=klienci.id) AS zamowienia_klienci
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"
lukesh
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.
adiseq
a teraz kumam o co chodzi smile.gif jeszcze raz wielkie dzięki wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.