mysql php ] 이 코드는 현재 사분기에서부터 거슬러 올라가면서 데이터를 조회하고, 데이터가 있다면 해당 사분기의 평균을 계산하여 업데이트합니다. 가능한 많은 분기까지 거슬러 올라갑니다.
작성자 정보
- 삼둡 작성
- 작성일
컨텐츠 정보
- 1,942 조회
- 목록
본문
<?php
$servername = "your_mysql_server";
$username = "your_mysql_username";
$password = "your_mysql_password";
$dbname = "your_database_name";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$currentQuarter = QUARTER(NOW());
// Iterate over all previous quarters
for ($i = 1; $i <= $currentQuarter; $i++) {
$quarterToCheck = $currentQuarter - $i;
// Get the data grouped by herbname and quarter
$sql = "SELECT uh.herbname, QUARTER(uh.date) as quarter,
SUM(uh.price * uh.quantity / uh.weight) as total_cost,
COUNT(*) as count
FROM used_herb uh
WHERE QUARTER(uh.date) = $quarterToCheck
GROUP BY uh.herbname, quarter";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$herbName = $row["herbname"];
$quarter = $row["quarter"];
$totalCost = $row["total_cost"];
$count = $row["count"];
if ($count > 0) {
$avgCostPerGram = $totalCost / $count;
// Update the herb table with the calculated average cost per gram for the matching herbname
$updateSql = "UPDATE herb
SET cost_per_gram = $avgCostPerGram
WHERE herbname = '$herbName'";
$conn->query($updateSql);
}
}
echo "Herb table updated successfully for quarter $quarterToCheck.";
break; // Exit the loop once data for a quarter is found and updated
}
}
$conn->close();
?>

위의 코드에서 AVG()함수를 쓰지 않고 그 부분은 php로 구현하는 코딩으로 바꾸어주면 좋겠어. 그게 내가 생각하는 방식이거든
sum함수도 안쓰고 php에서 해결하면 좋겠어, mysql은 quarter함수만 이용하는 선에서 코딩을 바꾸어줄래?
위의 sql구분에서 이번 분기가 아닌 전 사분기의 입고 가격을 참조해야하고, 전 사분기의 입고 가격이 없다면 전전 사분기의 입고가격을 조회해야하고 , 이런 부분은 루프로 만들어달라고 아까 말했었어
이 코드는 현재 분기에서부터 거슬러 올라가면서 데이터를 조회하고, 데이터가 있다면 해당 분기의 평균을 계산하여 업데이트합니다. 가능한 많은 분기까지 거슬러 올라갑니다.
관련자료
-
이전
-
다음