Our goal in this project is to create some reporting pages for a bookstore.
To run this project;
-
Download ammps ( software stack of Apache, Mysql & PHP )
-
After installation, copy all files to "C:\Program Files\Ampps\www" ( this is default for me )
-
Then go to "http://localhost/CSE348/install.php" using your web browser
Before running the project, Please go to MYSQL --> Edit --> Preferences --> SQL Editor and set to connection read timeout to at least 60. Because we will be running some scripts to simulate sales transactions on database side
To complete this project I have used :
- VSCode for PHP and SQL codes
- MySQL WorkBench ( with ammps, mysql will be installed but I don't like the browser gui. So I have installed the workbench, workbench is much more capable )
- For database connections I have used PDO - PHP Data Objects
- To read and upload .csv files to database I have used "LOAD DATA INFILE" command.
To use this command you may need to run this sql command to check default folder path
- SHOW VARIABLES LIKE "secure_file_priv";
To change it; go to "C:\Program Files\Ampps\mysql\my.ini" file and find "# SERVER SECTION" then add the below line under this section :
- secure_file_priv="C:/Program Files/Ampps/www/CSE348"
LOAD DATA INFILE 'C:\\Program Files\\Ampps\\www\\CSE348\\turkey.csv'
IGNORE INTO TABLE temp
FIELDS TERMINATED BY ';'
ENCLOSED BY ''
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@col1, @col2, @col3)
set district_name = TRIM(@col1),
city_name = TRIM(@col2),
branch_name = TRIM(@col3);
DROP PROCEDURE IF EXISTS procedure_SimulateSales;
SET @row_number = 0;
-- DELIMITER $$
-- CREATE PROCEDURE procedure_SimulateSales()
CREATE DEFINER=`root`@`localhost` PROCEDURE `procedure_SimulateSales`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE branchCount INT DEFAULT (Select Count(1) from branch);
DECLARE customerID INT DEFAULT 0;
DECLARE branchID INT DEFAULT 0;
DECLARE stockID INT DEFAULT 0;
DECLARE bookAmount INT DEFAULT 0;
DECLARE totalStock INT DEFAULT 0;
DECLARE minDate DATETIME DEFAULT '2020-04-30 14:53:27';
DECLARE maxDate DATETIME DEFAULT '2021-04-30 14:53:27';
DECLARE c1 CURSOR FOR
-- Generate random number between 40 and 500 for every branch
SELECT id as customerID,
CASE
WHEN @row_number < branchCount THEN @row_number:=@row_number + 1
ELSE @row_number:=@row_number + 1 - branchCount
END as branchID,
(FLOOR( 10 + RAND( ) *10 )) AS bookAmount
FROM bedirhan_bardakci.tampRandomCustomers;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- not found olursa true yap
CREATE TABLE IF NOT EXISTS tampRandomCustomers (
id INT(6) NULL
);
Delete from bedirhan_bardakci.tampRandomCustomers;
INSERT INTO bedirhan_bardakci.tampRandomCustomers (id )
SELECT id
FROM bedirhan_bardakci.customer
order by RAND();
OPEN c1;
WHILE NOT done DO
FETCH NEXT FROM c1 INTO customerID, branchID, bookAmount;
SELECT Count(1) into totalStock FROM bedirhan_bardakci.stock where branch_id = branchID and isSold = 0;
IF (done = FALSE ) THEN -- Prevent Last row of inner cursor fetched twice
WHILE bookAmount > 0 and totalStock > 0 DO
SELECT id
into stockID
FROM bedirhan_bardakci.stock
where branch_id = branchID
and isSold = 0
LIMIT 1;
INSERT INTO bedirhan_bardakci.sale (customer_id, salesman_id, stock_id, amount, saledate)
VALUES (
customerID,
(select id from bedirhan_bardakci.salesman where branch_id = branchID order by RAND() LIMIT 1),
stockID,
1,
(SELECT TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, minDate, maxDate)), minDate))
);
Update bedirhan_bardakci.stock set isSold = 1 where id = stockID;
SET bookAmount = bookAmount - 1;
SET totalStock = totalStock - 1;
END WHILE;
END IF;
END WHILE;
CLOSE c1;
DROP TABLE IF EXISTS tampRandomCustomers;
END;
-- END$$
-- DELIMITER ;
CALL procedure_SimulateSales();
$mysql_host = "localhost";
$mysql_user = "root";
$mysql_password = "mysql";
$db = new PDO("mysql:host=$mysql_host", $mysql_user, $mysql_password);
$query2 = file_get_contents(__DIR__ . "\question3_C_1.sql");
$query2 = $db->prepare($query2);
$query2->bindParam(':param_id', $selected);
$query2->execute();
$tempRowIndex = 1;
$tempIncome = 0;
$tempAmount = 0;
foreach ($query2 as $row2) {
echo "<tr>";
echo "<td>" . $tempRowIndex . "</td>";
echo "<td>" . $row2['customerName'] . " " . $row2['customerSurnmae'] . "</td>";
echo "<td>" . $row2['totalAmount'] . " pcs</td>";
echo "<td>" . $row2['totalIncome'] . " TL</td>";
echo "</tr>";
$tempIncome = $tempIncome + $row2['totalIncome'];
$tempAmount = $tempAmount + $row2['totalAmount'];
$tempRowIndex = $tempRowIndex + 1;
}
echo "</table> <br>";
-
Official Turkey City List Download Link is kind of hidden on the page, so I want to put a screenshot :)