Utwórz bazę danych sklep i tabelę produkty z kolumnami id, nazwa, cena oraz opis.
CREATE DATABASE sklep;
USE sklep;
CREATE TABLE produkty (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100),
cena DECIMAL(10, 2),
opis TEXT
);
Dodaj kilka produktów do tabeli, w tym nazwę, cenę i opis.
INSERT INTO produkty (nazwa, cena, opis) VALUES ('Produkt A', 50.00, 'Opis produktu A');
INSERT INTO produkty (nazwa, cena, opis) VALUES ('Produkt B', 75.00, 'Opis produktu B');
Dodaj kolumnę kategoria do tabeli produktów.
ALTER TABLE produkty ADD COLUMN kategoria VARCHAR(50);
Zaktualizuj cenę i opis produktu 'Produkt A'.
UPDATE produkty SET cena = 55.00, opis = 'Nowy opis produktu A' WHERE nazwa = 'Produkt A';
Usuń produkt 'Produkt B' z tabeli.
DELETE FROM produkty WHERE nazwa = 'Produkt B';
Stwórz formularz do dodawania nowych produktów do bazy danych (z formularza HTML).
Skorzystaj z PHP do obsługi formularza i zapisywania danych w tabeli.
Stwórz plik add_product.php, który odbiera dane z formularza i dodaje je do bazy danych.
prepare('INSERT INTO produkty (nazwa, cena, opis) VALUES (?, ?, ?)');
$stmt->execute([$nazwa, $cena, $opis]);
}
?>
Stwórz formularz, który umożliwi aktualizację danych produktów (np. ceny, opisu).
Stwórz stronę, która wyświetla listę produktów z bazy danych.
query('SELECT * FROM produkty');
while ($row = $stmt->fetch()) {
echo $row['nazwa'] . ' - ' . $row['cena'] . ' zł
';
}
?>
Stwórz formularz do usuwania produktów po ID.
Zadanie: Wybierz produkty, których cena jest wyższa niż 100.
SELECT * FROM produkty
WHERE cena > 100;
Zadanie: Załóżmy, że masz tabelę zamowienia z kolumnami id, produkt_id, data. Połącz tabelę zamowienia z tabelą produkty na podstawie produkt_id i wybierz nazwę produktu oraz datę zamówienia.
SELECT produkty.nazwa, zamowienia.data
FROM zamowienia
JOIN produkty ON zamowienia.produkt_id = produkty.id;
Zadanie: Oblicz średnią cenę produktów w tabeli produkty.
SELECT AVG(cena) AS srednia_cena
FROM produkty;
Zadanie: Pogrupuj produkty w tabeli produkty po cenach, licząc ile produktów znajduje się w danej grupie cenowej.
SELECT cena, COUNT(*) AS liczba_produktow
FROM produkty
GROUP BY cena;
Zadanie: Stwórz widok, który będzie zawierał tylko produkty o cenie powyżej 100.
CREATE VIEW drogie_produkty AS
SELECT * FROM produkty
WHERE cena > 100;
Zadanie: Stwórz formularz w PHP, który pozwala na dodanie nowego produktu do tabeli produkty i wyświetli wprowadzone dane.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sklep";
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$nazwa = $_POST['nazwa'];
$cena = $_POST['cena'];
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Błąd połączenia: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO produkty (nazwa, cena) VALUES (?, ?)");
$stmt->bind_param("sd", $nazwa, $cena);
$stmt->execute();
echo "Produkt dodany!";
$conn->close();
}
?>
Wyświetl wszystkie produkty, których cena jest wyższa niż 50 zł.
SELECT * FROM produkty WHERE cena > 50;
Posortuj produkty według ceny w porządku rosnącym.
SELECT * FROM produkty ORDER BY cena ASC;
Policz, ile produktów jest w każdej kategorii.
SELECT kategoria, COUNT(*) FROM produkty GROUP BY kategoria;
Znajdź produkty, których cena jest wyższa niż średnia cena wszystkich produktów.
SELECT * FROM produkty WHERE cena > (SELECT AVG(cena) FROM produkty);
Dołącz tabelę kategorii i wyświetl produkty wraz z nazwą kategorii.
SELECT produkty.nazwa, produkty.cena, kategorie.nazwa
FROM produkty
JOIN kategorie ON produkty.kategoria_id = kategorie.id;
Oblicz łączną cenę wszystkich produktów.
SELECT SUM(cena) AS suma_cen FROM produkty;
Stwórz procedurę, która doda nowy produkt do bazy.
DELIMITER //
CREATE PROCEDURE add_product(IN p_nazwa VARCHAR(100), IN p_cena DECIMAL(10,2), IN p_opis TEXT)
BEGIN
INSERT INTO produkty (nazwa, cena, opis) VALUES (p_nazwa, p_cena, p_opis);
END //
DELIMITER ;
Stwórz wyzwalacz, który zapisuje operacje w tabeli logi.
CREATE TABLE logi (
id INT AUTO_INCREMENT PRIMARY KEY,
operacja VARCHAR(255),
data TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
DELIMITER //
CREATE TRIGGER after_insert_product
AFTER INSERT ON produkty
FOR EACH ROW
BEGIN
INSERT INTO logi (operacja) VALUES ('Dodano nowy produkt: ' + NEW.nazwa);
END //
DELIMITER ;
Stwórz funkcję, która obliczy cenę po zastosowaniu zniżki na produkt.
DELIMITER //
CREATE FUNCTION oblicz_znizke(p_cena DECIMAL(10,2), p_znizka DECIMAL(5,2))
RETURNS DECIMAL(10,2)
BEGIN
RETURN p_cena - (p_cena * p_znizka / 100);
END //
DELIMITER ;
Stwórz procedurę do zmiany ceny produktu na podstawie ID.
DELIMITER //
CREATE PROCEDURE update_price(IN p_id INT, IN p_cena DECIMAL(10,2))
BEGIN
UPDATE produkty SET cena = p_cena WHERE id = p_id;
END //
DELIMITER ;