baza samochodów (komis)(1)

Podobne dokumenty
Dlaczego PHP? - zalety

korzyści finansowe przewaga pomysłu nad kapitałem tworzenie nowych branż tworzenie mechanizmów pochodnych (np. serwis snip).

Projektowanie systemów baz danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Ref. 7 - Język SQL - polecenia DDL i DML

Instalacja MySQL.

Język SQL, zajęcia nr 1

Bazy danych 7. SQL podstawy

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Systemy GIS Tworzenie zapytań w bazach danych

Przestrzenne bazy danych Podstawy języka SQL

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy danych. Dr inż. Paweł Kasprowski

Wykład 5: PHP: praca z bazą danych MySQL

Bazy danych. Polecenia SQL

Relacyjne bazy danych. Podstawy SQL

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy Danych i Usługi Sieciowe

Bazy danych i usługi sieciowe

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Paweł Rajba

Relacyjne bazy danych. Podstawy SQL

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

15. Funkcje i procedury składowane PL/SQL

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

P o d s t a w y j ę z y k a S Q L

Kurs. Podstawy MySQL

Wykład 5. SQL praca z tabelami 2

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Autor: Joanna Karwowska

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Składowane procedury i funkcje

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

SQL (ang. Structured Query Language)

Bloki anonimowe w PL/SQL

Bazy danych 5. Samozłaczenie SQL podstawy

Wykład 8. SQL praca z tabelami 5

CREATE USER

Bazy danych 4. SQL podstawy. P. F. Góra

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Język SQL, zajęcia nr 2

PODSTAWY BAZ DANYCH 13. PL/SQL

Wykład 2. SQL 1 Structured Query Lenguage

Bazy danych - wykład wstępny

Oracle11g: Wprowadzenie do SQL

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Podstawowe informacje o bazach danych. Technologie Informacyjne

SQL 4 Structured Query Lenguage

Wykład 4. SQL praca z tabelami 1

Autor: Joanna Karwowska

Oracle PL/SQL. Paweł Rajba.

Internetowe bazy danych

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

MySQL. Darmowa baza danych. Æwiczenia praktyczne

Podyplomowe Studium Programowania i Baz Danych

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Bazy danych i strony WWW

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Krzysztof Kadowski. PL-E3579, PL-EA0312,

Bazy danych. dr Radosław Matusik. radmat

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Wykład 6. SQL praca z tabelami 3

Wdrożenie modułu płatności eservice. dla systemu Magento

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Wykład 05 Bazy danych

Bazy danych 6. Klucze obce. P. F. Góra

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Struktura drzewa w MySQL. Michał Tyszczenko

PHP: bazy danych, SQL, AJAX i JSON

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Podyplomowe Studium Programowania i Baz Danych

Umieszczanie kodu. kod skryptu

Bazy Danych i Usługi Sieciowe

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

SIECI KOMPUTEROWE I BAZY DANYCH

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Transkrypt:

baza samochodów (komis)(1) dane : nr_rejestracyjny, marka, rocznik, kolor, cena, właściciel (dane sprzedającego) 1) określenie cech obiektów istniejacych w rzeczywistości (przypisanie atrybutów) 2) zaprojektowanie odpowiednich tabel 3) określenie związków między tabelami 4) pozbycie się ewentualnych związków (m-n)

baza samochodów (komis)(2) samochód i właściciel są rozłącznymi obiektami istniejącymi w rzeczywistości. zarówno samochód jak i właściciel istnieją niezależnie od siebie w pierwszym przybliżeniu tworzymy dwie tabele: samochody i wlasciciele (IDsamochodu,nr_rej,marka,kolor,rocznik,cena) (IDwlasciciela,imie,nazwisko,kontakt) zanim określimy związki przyjrzyjmy się tabeli samochody

baza samochodów (komis)(3) (IDsamochodu,nr_rej,marka,kolor,rocznik,cena) nr_rej przypisanie jednoznaczne cena przypisanie jednoznaczne ( jeśli dwa auta maja tą sama cenę to zbieżność jest przypadkowa) rocznik kwestia umowy, jeśli bierzemy pod uwagę daty, jest to dana prawie ciągła, jeśli zaś rocznik to zbiór jest ograniczony typowy słownik kolor jest cechą samochodu, jednak wiele samochodów ma ten sam kolor, ponadto kolory tworzą zbiór przeliczalny niewielkich rozmiarów typowe dane słownikowe marka jest atrybutem związanym a nie cechą firmy ( marki) istnieją niezależnie od poszczególnych egzemplarzy wyróżnimy więc niezależne tabele : kolory, marki, roczniki

Schemat relacyjny

Student-przedmiot-prowadzący Związki wieloznaczne: Student studiuje wiele przedmiotów na jeden przedmiot uczęszcza wielu studentów Asystent prowadzi przedmioty jeden przedmiot prowadzi wielu asystentów Student uczy się u wielu asystentów jeden asystent uczy wielu studentów

tabela asocjacyjna asocjacje(id ID,IDstudenta,IDasystenta,IDprzedmiotu) dodatkowo w tabeli mogą wystąpić jej cechy (termin?) pole IDstudenta stanowi klucz obcy ( jest stroną wiele związku 1-n z tabelą studenci w tabeli studenci stanowi klucz główny ( jest stroną jeden związku pola IDasystenta, IDprzedmiotu stanowią analogiczne połączenia poprzez konstrukcję tabeli asocjacyjnej uniknęliśmy związków wiele-do-wiele

diagram związków studiowania

Diagram związków studiowania (2) Tabela asocjacyjna zawiera bardzo dużo wpisów w szczególności iloczyn liczby studentów, liczby asystentów i liczby przedmiotów Można zrezygnować z poprawnej postaci normalnej i połączyć asystentów z przedmiotami. Efektem niekorzystnym będzie redundancja w kolumnie przedmiot Takie podejście pozwala uprościć tabelę asocjacyjną

Diagram związków studiowania(2) Do przedmiotu dodano pole termin aby umożliwić prowadzenie jednego przedmiotu przez dwóch asystentów. W tabeli przedmioty pojawi się redundancja ten sam przedmiot jest wpisany tyle razy ilu asystentów go prowadzi

diagram związków dla linii lotniczej Pasażer leci rejsem - związek wieloznaczny (m-n) Piloci pilotują rejsy związek m-n Samolot obsługuje wiele rejsów związek 1-n Proponowane tabele : samoloty (IDsamolotu,nazwa) rejsy (Nr_Rejsu,skąd, dokąd, godz-odlotu, godz_przylotu) pasażerowie (IDpazazera, imie, nazwisko, adres, telefon) piloci ( IDpilota, imie, nazwisko) Proponowany układ tabel nie redukuje związków wieloznacznych

redukcja związku pasażer rejs Należy wprowadzić dodatkową tabelę Rezerwacje zawierającą jako klucze obce IDpasażera i Nr_Rejsu co rozwiąże problem : wielu pasażerów podróżuje wieloma samolotami

redukcja związku piloci rejsy Należy wprowadzić dodatkową tabelę Przydzialy zawierającą jako klucze obce IDpilota i IDsamolotu co rozwiąże problem: wielu pilotów lata wieloma rejsami

diagram bez związków wieloznacznych

MySQL silnik bazodanowy (DB engine) duża szybkość odstępstawa od standardu SQL brak obsługi transakcji w wersjach starszych niż 4.0 obsługa wielu platform: Linux (x86, S/390, IA64 (Itanium), Alpha, PowerPC, AMD64 / EM64T), Windows (x86), Solaris (SPARC,x86), FreeBSD (x86), MacOS X, HP-UX (PA-RISC, IA64) AIX (RS6000) QNX (x86), Novell Netware (x86), SGI, DEC OSF.

MySQL - cechy rodzaje obsługiwanych tablic : MyISAM domyślny, nie obsługuje transakcji, HEAP najszybszy, gdyż wszystko jest przechowywane wyłącznie w pamięci RAM. Posiada jednak kilka ograniczeń, między innymi nie przechowuje danych po wyłączeniu serwera MySQL, InnoDB obsługuje transakcje, Licencja : GPL, również wersje z licencjami zamkniętymi Wraz z serwerem Apache i parserem PHP zaimplementowanymi na platformie Linux stanowi popularne środowisko serwerowe LAMP Linux, Apache, MySQL, PHP

podstawy SQL (1) SQL Structured Query Language strukturalny język zapytań wszystkie wartości danych są typów prostych wszystkie dane zapisywane w dwuwymiarowych tablicach (relacjach) operacje są zdefiniowane logicznie, a nie przez pozycje wiersza w tabeli Wiersze posiadają unikalny klucz

podstawy SQL (2) w odróżnieniu od zwykłych języków programowania SQL określa raczej CO ma być zrobione a nie JAK to zrobić takie języki nazywamy DEKLARATYWNE Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych DBMS DBMS - Data Base Management System SZBD -System Zarządzania Bazą Danych SELECT * FROM osoby WHERE imie= Ola ; WYBIERZ wszystkie pola Z tabeli osoby DLA KTÓRYCH SPEŁNIONY JEST WARUNEK imie= Ola ; W 1986 roku SQL stał się oficjalnym standardem, wspieranym przez Międzynarodową Organizację Normalizacyjną (ISO) Standard obecnie obowiązujący to SQL92

podstawy SQL (3) ze względu na zastosowanie wyróżniamy trzy typy SQL: SQL interakcyjny (np. praca na konsoli z programem mysql) Statyczny kod SQL (Static SQL) stanowi na ogół niezmienną część aplikacji Embedded SQL (Osadzony SQL) (np. C++,Java) Język modułów w analogii do podprogramów) Dynamiczny kod SQL (Dynamic SQL) - generowany jest w trakcie pracy aplikacji

podstawy SQL (4) podział zapytań SQL DML (ang. Data Manipulation Language, czyli Język Manipulacji Danymi) SELECT - pobranie z bazy danych, INSERT - umieszczenie danych w bazie, UPDATE - zmiana danych, DELETE - usunięcie danych z bazy. SQL DDL (ang. Data Definition Language,, czyli Język Definicji Danych - struktur) CREATE (np. CREATE TABLE, CREATE DATABASE,...) DROP (np. DROP TABLE, DROP DATABASE,...) ALTER (np. ALTER TABLE ADD COLUMN...)

podstawy SQL (5) przykłady zapytań SELECT * FROM pracownicy WHERE pensja > 2000 ORDER BY staz DESC; Wyświeta z tabeli pracownicy (FROM( pracownicy) ) wszystkie kolumny (*)( dotyczące tych pracowników, których pensja jest większa niż 2000 (WHERE( pensja > 2000) ) i sortuje wynik malejąco według stażu pracy (ORDER( BY staz DESC). INSERT INTO pracownicy (imie, nazwisko, pensja, staz) ) VALUES ('Jan' Jan', 'Kowalski' Kowalski', 5500, 1); UPDATE pracownicy SET pensja = pensja * 1.1 WHERE staz > 2; DELETE FROM pracownicy WHERE imie = 'Jan'' AND nazwisko = 'Kowalski'' Kowalski'; CREATE TABLE pracownicy (imie varchar(255), nazwisko varchar(255), pensja float, staz int); DROP TABLE pracownicy; ALTER TABLE pracownicy ADD COLUMN dzial varchar(255);

Podstawowe typy danych CHAR(M) Pole znakowe. Przechowuje teksty o ustalonej z góry długości. Ograniczone do 255 znaków. VARCHAR(M) Pole znakowe. Przechowuje taką długość tekstu, jaka jest używana. INT[(M)] [UNSIGNED] Pole liczb całkowitych. Przechowuje liczby z zakresu od -2147483648 do 2147483647 (z parametrem UNSIGNED - od 0 do 4294967295). DATE Pole daty przechowuje daty z zakresu od '1000-01-01' do '9999-12-31'. BLOB/TEXT Pole tekstowe. Przechowuje dłuższe, wielowierszowe teksty do 65535 znaków. Przykład tworzenia tabeli: CREATE TABLE badania ( ID_badania INT NOT NULL auto_increment, badanie VARCHAR(15), PRIMARY KEY (id_badania) );

Funkcje agregujące Count() - zliczanie wynikowych wierszy Avg() średnia z pól podanej kolumny Max(),Min() maksimum/minimum w kolumnie Sum() suma wartości wszystkich pól w kolumnie Przykłady: SELECT max(cena) FROM produkty; SELECT sum(cena*ilosc) from produkty; SELECT count (ID) FROM produkty.

podstawy SQL (1) podział zapytań SQL DDL (ang. Data Definition Language,, czyli Język Definicji Danych - struktur) CREATE (np. CREATE TABLE, CREATE DATABASE,...) DROP (np. DROP TABLE, DROP DATABASE,...) ALTER (np. ALTER TABLE ADD COLUMN...) SQL DML (ang. Data Manipulation Language, czyli Język Manipulacji Danymi) SELECT - pobranie z bazy danych, INSERT - umieszczenie danych w bazie, UPDATE - zmiana danych, DELETE - usunięcie danych z bazy.

MySQL konto uzytkownika z poziomu administratora MySQL (root) należy stworzyć bazę u żytkownika: >create database naszabaza; oraz nadać uzytkownikowi prawa do niej : >GRANT ALL PRIVILEGES ON naszabaza.* TO user@localhost IDENTIFIED BY 'haslo'; oznacza to nadanie wszystkich praw do wszystkich tabel w naszabaza użytkownikowi user podającemu haslo i łączącemu się z lokalnego serwera przywileje mogą być ograniczone do poszczególnych poleceń (SELECT, INSERT, UPDATE.) oraz do wybranych tabel : >grant SELECT on naszabaza.klienci to user@localhost IDENTIFIED BY 'haslo';

MySQL nawiązanie połączenia nawiązanie połączenia terminalowego wymaga: posiadania konta na serwerze posiadania dostępu do bazy MySQL (konta MySQL) To są dwa INNE konta (często nazywają się tak samo dla ułatwienia) po zalogowaniu na serwer wpisujemy z konsoli: mysql u uzytkownik_bazy p password : ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 32359 to server version: 3.23.49-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

MySQL nawigacja przegląd baz : show databases; wybranie bazy ( konieczne uprawnienia) >use naszabaza; database changed przegląd tabel : show tables; struktura tabeli: >describe nazwa; / >explain nazwa;

MySQL TYPY DANYCH liczbowe (całkowite i zmiennopozycyjne) tekstowe daty i czasu

MySQL LICZBY CAŁKOWITE BAJTÓW MIN MAX TINYINT 1-128 127 SMALLINT 2-32768 32767 MEDIUMINT 3-8388608 8388607 INT 4-2147483648 -2147483647 BIGINT 8-2^63 2^63-1

MySQL liczby zmiennopozycyjne FLOAT(M,D) pojedyncza precyzja, zakres +/- 1.175494351E-38-3.402823466E+38 M- całkowita ilość cyfr D- ilość cyfr po przecinku dokładność ok. 7 cyfr znaczących DOUBLE(M,N) double precision 2.2250738585072014E-308 do 1.7976931348623157E+308 dokładność ok. 15 cyfr znaczących

MySQL data i czas DATE zakres : '1000-01-01' do '9999-12-31' DATETIME DATETIME zakres: '1000-01-01 00:00:00' to '9999-12-31 23:59:59' TIME zakres: -838:59:59' to '838:59:59' YEAR zakres 1901-2155

MySQL typy tekstowe CHAR (synonim CHAR(1)) jednoznakowy VARCHAR(M) łańcuch o zmiennej długości maksymalnie m-znaków BLOB - 65,535 (2^16 1) bytes MEDIUMBLOB 16,777,215 (2^24 1) LONGBLOB 4294967295 (4GB) (2^32 1) TEXT to samo co BLOB SET('value1','value2',...) jawnie wyspecyfikowane, max 64 elementy

MySQL specyfikacja pól not NULL zabroniony wpis null auto_increment jeśli w takie pole nie wpiszemy nic, lub wpiszemy 0, MySQL uzupełnia wpisem o 1 większym od ostatniego primary key / primary key(nazwa) wyspecyfikowanie klucza częste łączenie : ID int not null auto_increment primary key,

MySQL tworzenie tabeli create table elementy( ID int not null auto_increment primary key, element varchar(20), cena float )

MySQL wstawianie rekordów insert into elementy(id,nazwa,cena) values(0, srubka,10); skrócone: insert into elementy values(0, srubka,10); można ręcznie nadać ID ale na ogół jest to zbędne ( czasem szkodliwe!)

MySQL wybieranie rekordów SELECT nazwy_kolumn FROM nazwy_tabel WHERE warunek_logiczny; wybranie wszystkich: select * from elementy; wybranie niektórych kolumn z warunkiem: select nazwa,cena from elementy where cena < 100; SELECT DISTINC - usuwanie duplikatów ORDER BY nazwa sortowanie (na końcu)

MySQL zapytania łączące tabele select * from marki; IDmarki 1 2 marka fiat ford IDmodelu IDmarki model 1 1 125P select * from modele; 2 3 1 1 Croma Bravo 4 2 Fiesta 5 2 Focus 6 2 Mondeo

MySQL zapytania łączące tabele złączenie kluczy w relacji 1-n jest tzw. złączeniem naturalnym i dla tego równoważnę są dwie instrukcje : select model,marka from modele,marki where marki.idmarki=modele.idmarki; select model,marka from modele natural join marki; select model,marka from modele join marki on marki.idmarki=modele.idmarki; ( w MySQL ta wersja nie działa)

MySQL zapytania łączące tabele złączenie lewostronne składa się z wierszy tablicy LEWA i pasujących wierszy z tablicy PRAWA. Gdy brak pasujących wierszy z prawej pojawi się NULL W naszym przypadku nie ma różnicy między złączeniem lewostronnym i naturalnym: select model,marka from marki left join modele on marki.idmarki=modele.idmarki; Jednak po dodaniu rekordu do tabeli marki, który nie ma jeszcze dodanego modelu : insert into marki(marka) values ( BMW ) model 125P Croma Bravo Fiesta Focus Mondeo model 125P Croma Bravo Fiesta Focus Mondeo NULL marka fiat fiat fiat ford ford ford marka fiat fiat fiat ford ford ford BMW

MySQL zapytania łączące tabele Wykorzystując złączenie lewostronne można uzyskać te wiersze z tabeli, które nie mają odpowiedników drugiej tabeli : select model,marka from marki left join modele on marki.idmarki=modele.idmarki WHERE model is NULL; model NULL marka BMW

MySQL zapytania łączące tabele Czy jest możliwe skrzyżowanie tabeli samej ze sobą? select marki,marki from marki,marki; błąd ERROR 1066: Not unique table/alias: 'marki słowo AS przechowuje tabelę w zapytaniu pod inną nazwą: select tab1.marka as marka1,tab2 tab2.marka as marka2 FROM marki AS tab1,, marki AS tab2; marka1 fiat ford BMW fiat ford BMW fiat ford BMW marka2 fiat fiat fiat ford ford ford BMW BMW BMW

MySQL zapytania łączące tabele przykład wykorzystania usuwanie duplikatów. zrobiono błędny wpis dodatkowy rekord o identycznej zawartości lecz innym ID: insert into marki values(4,'fiat'); i usunięto BMW delete from marki where marka= BMW ; interesują nas rekordy o tym samym wpisie lecz różnych ID więc modyfikujemy zapytanie dodając: select tab1.idmarki as ID1,tab1 tab1.marka as marka1, tab2.idmarki as ID2,tab2 tab2.marka as marka2 FROM marki AS tab1,, marki AS tab2 where marka1=marka2 and ID1<>ID2 ID1 marka1 1 fiat 2 ford 4 fiat 1 fiat 2 ford 4 fiat 1 fiat 2 ford 4 fiat ID1 marka1 4 fiat 1 fiat ID2 1 1 1 2 2 2 4 4 4 ID2 1 4 marka2 fiat fiat fiat ford ford ford fiat fiat fiat marka2 fiat fiat

MySQL przykłady klient składa zamówienia, na jednym może być wiele pozycji dostawca proponuje ofertę obiektami są towary wyszczególnione w tabeli

MySQL przykłady Insert into towary values(1,'laptop','toshiba','x100',3200,10); Insert into towary values(2,'laptop','hp','hp100',3600,10); Insert into towary values(3,'laptop','hp','hp200',3800,2); Insert into towary values(4,'laptop','compaq','cq999',2800,10); Insert into towary values(5,'laptop','compaq','cq222',1800,15); Insert into towary values(6,'laptop','compaq','cq123',5800,5);

MySQL przykłady insert into dostawcy values(1,'importer1','krakow'); insert into dostawcy values(2,'importer2','wieliczka'); insert into dostawcy values(3,'importer3','warszawa');

MySQL przykłady insert into klienci values(1,'sklep Hani','Krolewska 10','Krakow'); insert into klienci values(2,'sklep Oli','Dluga 1','Krakow'); insert into klienci values(3,'sklep Komputerek','Sliczna 32','Krakow'); insert into klienci values(4,'sklep Laptopik','Pawia 10','Wieliczka'); insert into klienci values(5,'hurtownia WW ','Kopalniana 1','Wieliczka'); insert into klienci values(6,'hurtownia Elektro','Aleje 12','Krakow');

MySQL przykłady -- dostawca 1 insert into oferty_dostawcow values(1,1,1,3000); insert into oferty_dostawcow values(2,1,2,3000); insert into oferty_dostawcow values(3,1,3,3300); insert into oferty_dostawcow values(4,1,4,2000); insert into oferty_dostawcow values(5,1,5,1000); insert into oferty_dostawcow values(6,1,6,5000);

MySQL przykłady -- dostawca 2 insert into oferty_dostawcow values(7,2,1,3100); insert into oferty_dostawcow values(8,2,2,3200); insert into oferty_dostawcow values(9,2,3,3000); insert into oferty_dostawcow values(10,2,4,1900); insert into oferty_dostawcow values(11,2,5,1200); insert into oferty_dostawcow values(12,2,6,5200);

MySQL przykłady --dostawca 3 insert into oferty_dostawcow values(13,3,1,3050); insert into oferty_dostawcow values(14,3,2,2900); insert into oferty_dostawcow values(15,3,3,3000); insert into oferty_dostawcow values(16,3,4,1800); insert into oferty_dostawcow values(17,3,5,1300); insert into oferty_dostawcow values(18,3,6,4500);

MySQL przykłady -- klient 1 ma 2 zamówienia insert into zamowienia values(1,'2005-11-01',1); insert into zamowienia values(2,'2005-11-05',1); -- klient 2 ma 1 zamówienie insert into zamowienia values(3,'2005-11-05',2);

-- pozycje zamowienia klienta1 -- zam1 insert into pozycje_zamowien values(1,1,1,10); insert into pozycje_zamowien values(2,1,2,10); insert into pozycje_zamowien values(3,1,3,5); insert into pozycje_zamowien values(4,1,5,15); --zam2 insert into pozycje_zamowien values(6,2,1,5); insert into pozycje_zamowien values(7,2,3,10); insert into pozycje_zamowien values(8,2,4,15); insert into pozycje_zamowien values(9,2,5,5); insert into pozycje_zamowien values(10,2,6,2); -- pozycje zamowienia klienta2 -- zam3 insert into pozycje_zamowien values(11,3,1,20); insert into pozycje_zamowien values(12,3,2,30); insert into pozycje_zamowien values(13,3,3,20); insert into pozycje_zamowien values(14,3,4,2); insert into pozycje_zamowien values(15,3,5,2); insert into pozycje_zamowien values(16,3,6,2); MySQL przykłady

MySQL przykłady -zamowienia zlozone przez 'Sklep Hani' select Nr_zamowienia as zamowienia_hani from zamowienia natural join klienci where klienci.nazwa_firmy='sklep Hani';

MySQL przykłady -- policzyc ilosc zamowien klienta 'Sklep Hani select COUNT(Nr_zamowienia) as zamowienia_hani from zamowienia natural join klienci where klienci.nazwa_firmy='sklep Hani';

MySQL przykłady -- wyszczegolnic pozycje zamowienia 1( nazwy towarow i ich ceny sprzed) select model,cena_sprzed from zamowienia,pozycje_zamowien,towary where towary.nr_katalog_towaru=pozycje_zamowien.nr_katalog_towaru and pozycje_zamowien.nr_zamowienia=zamowienia.nr_zamowienia and zamowienia.nr_zamowienia=1;

MySQL przykłady ---- wartosci kolejnych zamowien select zamowienia.nr_zamowienia,klienci.nazwa_firmy,sum(cena_sprzed) from zamowienia,pozycje_zamowien,towary,klienci where zamowienia.nr_zamowienia=pozycje_zamowien.nr_zamowienia and pozycje_zamowien.nr_katalog_towaru=towary.nr_katalog_towaru and klienci.id_klienta=zamowienia.id_klienta group by zamowienia.nr_zamowienia;

MySQL przykłady -- zamowienia i porownaie ilosci dostepnej select model,sum(ilosc_w_mag),sum(ilosc_zam) from zamowienia,pozycje_zamowien,towary where towary.nr_katalog_towaru=pozycje_zamowien.nr_katalog_towaru and pozycje_zamowien.nr_zamowienia=zamowienia.nr_zamowienia group by model;

MySQL przykłady --oferty wg dostawcow select nazwa_firmy, cena, nazwa_producenta,model from towary,oferty_dostawcow,dostawcy where towary.nr_katalog_towaru=oferty_dostawcow.nr_katalog_towaru and oferty_dostawcow.id_dostawcy=dostawcy.id_dostawcy;

Jak uzyskać informację ----najtansze oferty wg modeli select nazwa_firmy, min(cena), nazwa_producenta,model from towary,oferty_dostawcow,dostawcy where towary.nr_katalog_towaru=oferty_dostawcow.nr_katalog_towaru and oferty_dostawcow.id_dostawcy=dostawcy.id_dostawcy group by model; NIE DZIAŁA!! wszystko co jest po SELECT powinno być uyte w klauzuli GROUP BY

create temporary table tmp select concat(nr_katalog_towaru,':',min(cena)) as test from oferty_dostawcow group by nr_katalog_towaru; 1:3000 2:2900 3:3000 4:1800 5:1000 6:4500 select nazwa_firmy,model,cena from dostawcy,towary,oferty_dostawcow,tmp where towary.nr_katalog_towaru=oferty_dostawcow.nr_katalog_towaru and dostawcy.id_dostawcy=oferty_dostawcow.id_dostawcy and concat(towary.nr_katalog_towaru,':',cena)=tmp.test ; test

PHP - wspomaganie programowania aplikacji internetowych 1994 - PHP (Rasmus Lerdorf) - brak pętli, instrukcji warunkowych, struktur danych 1995 - obsługa formularzy i dostęp do msql 1997 - PHP3 (Zeef Suraski, Andi Gutmans) - strukturalna i obiektowa wersja języka 2000 - PHP4 + moduł skryptowy ZEND Najnowsza wersja (PHP4) korzysta z potężnej platformy skryptowej Zend (http://( http://www.zend.com), co zwiększa jej wydajność oraz może działać jako moduł serwera innego niż Apache. Kod źródłowy PHP jest powszechnie dostępny na zasadzie Open Source (http://( http://www.opensource.com)

Dlaczego PHP? - zalety (+) Prosta składnia zapożyczona z C, z elementami Perl a i skryptów powłoki (+) integracja z językiem HTML (+) naturalne połączenie warstwy baz danych z warstwą serwera WWW (+) zunifikowany interfejs do różnych baz danych

Dlaczego PHP? - zalety (+) bezpieczeństwo kodu - PHP wykonuje się po stronie serwera ( niezależność od przeglądarki) (+) bezpieczeństwo danych - wykorzystanie ssl i HTTPS (+) PHP jako moduł serwera WWW (+) generowanie HTML, GIF, JPG, PDF (+) dostępność kodu

Dlaczego PHP? - wady (-) język interpretowany więc wolny (-) brak systemu transakcji (-) brak STDIN - w Linuxie można obejść otwierając jawnie plik /dev/stdin

Dla kogo PHP? Administratorzy serwisów WWW autorzy dynamicznych stron WWW użytkownicy bez prawa do uruchamiania skryptów CGI projektanci aplikacji mają za darmo interfejs użytkownika (HTML)

Instalacja UNIX RH 7.2 - wystarczy wybrać odpowiednie pakiety instalacyjne (PHP + MySQL) W starszych wersjach PHP było dostarczane bez wkompilowanych funkcji do obsługi baz danych. Konieczna była ręczna kompilacja../configure --with-apache=/sciezka_do_zrodel_apache --withmysql=/sciezka_do_zainst_mysql make make install

Instalacja UNIX Podobnie kompilujemy serwer APACHE./configure --activate-module=src/modules/php3/libphp3 make make install w plikach konfiguracyjnych APACHE należy dodac wpisy: AddType aplication/x-httpd-php.php.php3 [.php4]

Instalacja WINDOWS Istnieje wersja na skróty pod system Windows o nazwie PHPTriad (PHP +APACHE +MySQL) (binaria) system można testować na lokalnym komputerze posługując się adresem - http://localhost Plik index.html powinien znajdować się w c:\apache\htdocs, tam również skrypty PHP, konfiguracja w pliku c:\apache\conf\httpd.conf

literatura Craig Hilton, Jeff Willis PHP3 - internetowe aplikacje bazodanowe Marek Nowakowski PHP4 & MySQL dla webmastera Rasmus Lerdorf Leksykon PHP http://www.php.pl ; http://www.php.net http://ux.ap.krakow.pl/~bar/ Strona tymczasowa, trochę polskojęzycznych informacji, kursy PHP i MySQL,

Umieszczanie PHP w dokumentach HTML Kod skryptu umieszczany jest bezpośrednio w kodzie HTML ujęty w parę znaczników: <?PHP...?> (skrócone <?...?> <HTML><BODY> <?PHP echo Jestem skryptem PHP <BR>`;?> </BODY></HTML> Skrypt niekoniecznie w sekcji BODY przeglądarka wyświetla stronę HTML i WYNIK skryptu PHP Przeglądarka ignoruje odstępy i znaki końców akapitu, trzeba je zastąpić odpowiednimi znacznikami HTML (&nbsp, <BR> itp.) plik skryptu powinien mieć jedno z akceptowanych rozszerzeń (.php), treść skryptu jest niedostępna dla użytkownika po stronie przeglądarki

Możliwości języka Dołączanie plików include ("filename.abc") zmienne tablice operatory i wyrażenia instrukcje (struktury sterujące) funkcje użytkownika integracja z bazami danych - ogromna ilość funkcji pomocniczych dedykowanych dla najpopularniejszych systemów (MySQL, ORACLE, PostgreSQL, Informix) funkcje obsługi :stringów, tablic, dat, URL, sieci, ODBC, grafiki i plików

PHP - Dołączanie plików include ("nazwapliku.php ); dołączanie plików jest nieodzownym mechanizmem zapewniającym przejrzystość kodu i zwiększającym bezpieczeństwo, wymagane jest aby w dołączanym pliku występowały znaczniki PHP Do standardowych metod należy definiowanie w osobnych plikach pewnych stałych elementów stron (np. nagłówków) i dołączanie ich do różnych stron Pliki dołączane muszą mieć odpowiednie atrybuty

PHP - zmienne W zmiennych odgrywa znaczenie wielkość liter PHP operuje następującymi typami danych: Liczby całkowite Liczby zmiennopozycyjne Łańcuchy znaków Tablice Zmienne tworzymy BEZ ich deklarowania w momencie pierwszego przypisania wartości: $x=1.234; $i=3; tab[0]='ala'; tab[]='ma kota';

PHP - operatory i wyrażenia Oper. logiczne <, <=, >, >=,!=, == #$x<=3; Oper. Przypisania = # $x=2*$y; Złożone $a++ ; #$a=$a+1; Wartości logiczne: FALSE - odpowiada "" {pusty napis} lub 0 TRUE - cokolwiek innego Każda zmienna jest skojarzona z wartością logiczną i tak np. pusta tablica - FALSE, zmienna jeszcze nie użyta - FALSE

PHP - instrukcje Instrukcja warunkowa - jeżeli... A jeżeli NIE... IF ($warunek) { instrukcja; } ELSE { instrukcja;} dopóki warunek powtarzaj instrukcję WHILE ($warunek) { instrukcja; } powtarzaj instrukcję dopóki warunek DO { instrukcja; } WHILE ($warunek;)

PHP - instrukcje FOR (instrukcja0;$warunek;instrukcja_sterująca) { instrukcja_w_pętli;} konstrukcja często stosowana przy ustalonej liczbie powtórzeń for($i=0;$i<10;$i++) {echo $i}; instrukcja wyboru: SWITCH ($x) case 0: instrukcja0; break; case 1: instrukcja1; break; DEFAULT : instrukcja_ani_1_ani_2; }

PHP - funkcje Funkcja jest konstrukcją programistyczną wykonująca określony algorytm i przyjmującą określoną wartość. Pozwala również dzielić złożone problemy na fragmenty, Wewnątrz funkcji powinna się znaleźć instrukcja RETURN definiująca wartość funkcji (zwracająca wartość) definicja przykładowa: function moja($a,$b) { return ($a+$b)/2; } użycie: echo moja(3,5); #wypisze wartość 4

PHP - funkcje - argumenty Przekazywanie przez wartość Z tą sytuacją mamy do czynienia gdy funkcja ma w odpowiedzi zwrócić pewną wartość ale NIE ZMIENIĆ wartości argumentów definicja przykładowa: function srednia($a,$b) { return ($a+$b)/2; } użycie: echo srednia(3,5); #wypisze wartość 4 Przekazywanie przez zmienną Z tą sytuacją mamy do czynienia gdy chcemy aby funkcja w efekcie swojego działania ZMIENIAŁA wartości argumentów definicja przykładowa: function zamiana(&$a, $a,&$b) $b) { $z=$a; $a=$b; $b=$z; return 0; #funkcja niczego nie liczy } użycie: $x=1;$y=2; $temp=zamiana($x,$y); echo $x,$y; wypisane zostanie 2 1 a nie 12 co oznacza że funkcja zmieniła swoje argumenty\

PHP - przekazywanie parametrów PHP udostępnia ciekawy mechanizm obsługujący sytuacje gdy chcemy w samym programie narzucić funkcji przekazanie parametru przez odwołanie: function zamiana($a,$b) { $z=$a; $a=$b; $b=$z; } użycie: $x=1;$y=2; $temp=zamiana(&$x, $x,&$y); $y); echo $x,$y; #wypisanie 2 1 użycie: $x=1;$y=2; $temp=zamiana($x,$y); echo $x,$y; #wypisanie 1 2

PHP- wartości domyślne funkcji i zasięg zmiennych Obsługa sytuacji gdy w wywołaniu nie podamy niektórych argumentów function opis($nazwisko="nieznany"){ return "Ten człowiek ma na nazwisko $nazwisko";} echo opis("nowak"); da w efekcie : Ten człowiek ma na nazwisko Nowak echo opis() ; da w efekcie : Ten człowiek ma na nazwisko NIEZNANY UWAGA!: zmienne z programu NIE są widoczne w funkcjach $x=1; function test1() { echo $x;} function test2() { global $x; echo $x;} test1();test2(); da w efekcie 1 ( a nie 11 gdyż wywołanie test1() nic NIE WYPISAŁO

PHP- obsługa plików (1) Korzystanie z plików wymaga następujących czynności : otwarcie pliku $fi=fopen("$nazwa_pliku","$tryb"); 'r' - Otwórz tylko do odczytu; ustawia wskaźnik pliku na początku pliku. 'r+' - Otwórz do odczytu i zapisu; ustawia wskaźnik pliku na początku pliku. 'w' - Otwórz tylko do zapisu; ustawia wskaźnik pliku na początku pliku i obcina plik (zeruje) do 0 długości. Jeśli plik nie istnieje to próbuje go utworzyć. 'w+' - Otwórz do odczytu i zapisu; ustawia wskaźnik pliku na początku pliku i obcina plik (zeruje) do 0 długości. Jeśli plik nie istnieje to próbuje go utworzyć. 'a' - Otwórz tylko do zapisu; ustawia wskaźnik pliku na końcu pliku. Jeśli plik nie istnieje to próbuje go utworzyć. 'a+' - Otwórz do odczytu i zapisu; ustawia wskaźnik pliku na końcu pliku. Jeśli plik nie istnieje to próbuje go utworzyć. $fi jest tzw. uchwytem pliku w nazwie pliku można używać http:// oraz ftp:// gdy się coś nie powiedzie $fi=false przydatna funkcja file_exists("nazwa") typu logicznego

PHP- obsługa plików (2) Po prawidłowym otwarciu można z plikiem pracować zapisać coś do pliku fputs($fi,"ten tekst trafi do pliku \n"); odzcytać z pliku $linia=fgets($fi,100); # 100 znaków lub $znak=fgetc($fi); Przy tych operacjach znacznik pliku przesuwany jest o 1 do przodu plik należy zamknąć fclose($fi);

PHP- funkcje wbudowane Matematyczne - sin($x) obsługi stringów - ereg($wzorzec,$napis) - przeszukuje $napis z wykorzystaniem wyrażenia regularnego $wzorzec obsługi tablic - sort($tablica) - sortuje tablice od min do max obsługi sieci - mail($odbiorca,$temat,$wiadomosc,$d\odatkowe_nagłowki) graficzne - imagecreate($wysokosc,$szerokosc) - tworzy obrazek typu GIF obsługi plików - fopen($plik,$tryb) - otwiera plik i zwraca jego identyfikator obsługa dat i czasu - date($format) obsługi baz danych - mysql_connect($host,$user,$password) - otwiera połaczenie z baza MySQL

Połączenie PHP-MySQL (1) PHP zawiera wiele funkcji umożliwiających prace z bazą. Wymienię tylko kilka najczęściej używanych. INT mysql_connect( nazwa hosta, nazwa_użyt, hasło ); funcja zwraca identyfikator (numer) połączenia użycie: $link = mysql_connect("localhost", info", info") or die ("Nie można się połączyć"); połączenie zostaje zamknięte po użyciu funkcji: mysql_close(link);

Połączenie PHP-MySQL(2) Wybranie bazy: mysql_select_db ( moja_baza") or die ("Nie mozna wybrać bazy danych"); zapytanie SQL: $result = mysql_query ("SELECT * FROM adresy",$link) or die ("Zapytanie zakończone niepowodzeniem"); Nie trzeba podawac $link- wtedy domyślnie ostanio użyte połączenie $result jest identyfikatorem (int) zbioru wynikow przykład: $result = mysql_query ("SELECT * FROM adresy",$link); echo "w zbiorze jest ". mysql_num_rows($result). "rekordow" ;

Połączenie PHP-MySQL(3) mysql_fetch_array($result) - pobiera wiersz i zwraca go w postaci tabeli jeśli w zbiorze wyników nie ma już rekordów zwracane jest FALSE pozwala to używać konstrukcji: while ($osoba=mysql_fetch_array($result)){ echo $osoba["imie"]. $osoba["nazwisko"]. $osoba["adres"]. "<br>" ; }

przykład licznik w pliku tekstowym <?PHP $filename="/tmp/licznik"; # WSTAW TU SWOJA NAZWE $fp=fopen($filename,"r+"); $nr=fgets($fp,10); $nr++; fseek($fp,0); fwrite($fp,$nr,10); fclose($fp); echo "<h1> licznik = $nr </h1>";?>

przykład licznik i ciasteczko <? setcookie("licznik","1",time()+100);?> ustawia ciastko o nazwie licznik ważne 100 sekund <html> <body> <? @$odwiedzony = $_COOKIE['licznik']; //odczytanie wartości ciasteczka $filename=./licznik $plik = fopen($filename,"r"); $licz = fread($plik, 10); fclose($plik); if ($odwiedzony) { echo("jeste6 tu po raz ". $licz); } else { $licz++; echo("jeste6 tu po raz ". $licz); } $wczyt = fopen($filename,"w"); fwrite($wczyt,$licz); fclose($wczyt);?> </body> </html>