Есеп беру құралдары
10-сыныптың информатика курсын осы соңғы сабақпен қорытындылаймыз! Дүкен иесі айдың соңында «қай тауар қанша сатылды, пайда қанша болды» дегенді қалай біледі? Деректер қорынан ШИКІ деректі емес, ДАЙЫН, безендірілген есепті алады. Бүгін дәл осы есеп құру процесін және оны бұғаттаудың неге қажет екенін үйренеміз.
Есеп (report) — экранға, баспаға немесе файлға шығарылатын деректердің ФОРМАТТАЛҒАН түрі. Деректер қорынан қажетті деректі алып, ыңғайлы түрде ұсынуға мүмкіндік береді.
Есеп жасалып жатқанда, деректер қоры «тыныш» тұрмайды — банк қызметкері есеп шығарып жатқанда, тұтынушы сол сәтте банкоматтан ақша алуы мүмкін! Осындай қайшылықты болдырмау үшін арнайы механизм бар:
Бұғат (locking) — деректер қорын БІР МЕЗГІЛДЕ бірнеше қолданушының қолдануын басқару механизмі.
| Әдіс | Сипаттамасы |
|---|---|
| Жазу/оқу бұғаты | Жазушы жазу бұғатын сұрайды; оқу бір мезгілде бірнешеуге рұқсат етіледі, бірақ жазу аяқталғанша күтеді |
| Нұсқаны бақылау (versioning) | Оқырманға деректің ӨЗГЕРІССІЗ нұсқасы кепілдендіріледі, бұғат қажет емес |
Бұғаттаудың үш ДЕҢГЕЙІ бар — не мөлшерде «құлыпталатынына» қарай:
| Деңгей | Сипаттамасы |
|---|---|
| Кестені бұғаттау | Бүкіл кестені бір мезгілде өзгертуден сақтайды |
| Бетті бұғаттау | Кестенің бір бетін ғана сақтайды |
| Жолды бұғаттау | Кестенің бір жолын ғана сақтайды (ЕҢ ДӘЛ деңгей) |
Web-негізіндегі есептер PHP + SQL арқылы жасалады. Деректер БІРНЕШЕ кестеде орналасса (мыс. аспап атауы бір кестеде, бағасы екіншісінде), оларды біріктіру үшін LEFT JOIN қолданылады.
Берілді: әр өндіруші үшін оның аспаптарының тізімі мен жалпы құнын шығаратын есеп керек.
Неге екі while циклі керек? Сыртқы цикл ӘР ӨНДІРУШІНІ өтеді, ал ІШКІ цикл сол өндірушінің АСПАПТАРЫН шығарады — бұл иерархиялық есептің табиғи құрылымы.
$sSQL = "SELECT id_producers, name FROM producers";
$result = mysqli_query($conn, $sSQL);
while ($row = mysqli_fetch_array($result)) {
$sum = 0;
echo "Ondirushi: " . $row['name'] . "<br/>";
$sSQL1 = "SELECT instruments.price, name_instr.name_instr FROM instruments";
$sSQL1 .= " LEFT JOIN name_instr ON instruments.id_name_ins = name_instr.id_name_ins";
$sSQL1 .= " WHERE instruments.id_producers = " . $row['id_producers'];
$res = mysqli_query($conn, $sSQL1);
while ($r = mysqli_fetch_array($res)) {
echo $r['name_instr'] . " . " . $r['price'] . "<br/>";
$sum = $sum + $r['price'];
}
echo "Barlygy: " . $sum . "<br/><br/>";
} Түсіндірме: .= операторы ұзын SQL сұранысты БІРНЕШЕ жолға бөліп жазуға мүмкіндік береді — жол қосу арқылы.
Жауабы:
Ondirushi: Turdyguov Zh.
Dombyra . 200000
Barlygy: 200000
Ondirushi: Abramkin V.
Qobyz . 150000
Barlygy: 150000 Есепті ЫҚШАМ, оқуға ыңғайлы ету үшін HTML кесте тегтерін қолдануға болады — PHP кодының арасында <table>, <tr>, <td> орналастырамыз:
<table>
<tr><td>Aspap atauy</td><td>Bagasy</td></tr>
<?php
while ($r = mysqli_fetch_array($res)) {
?>
<tr>
<td><?php echo $r['name_instr']; ?></td>
<td><?php echo $r['price']; ?></td>
</tr>
<?php } ?>
</table> <?php ... ?> ішінде цикл ашылып, HTML бөлігі циклдің ӘР қадамында қайталанады, содан кейін цикл <?php } ?> арқылы жабылады.- Есеп — деректі формматтап, экранға/баспаға/файлға шығару құралы.
- Бұғаттау (locking) — есеп жасалып жатқанда деректің қайшылықсыз болуын қамтамасыз етеді.
- Web-негізіндегі есеп PHP + SQL арқылы, LEFT JOIN көмегімен бірнеше кестені біріктіріп жасалады.
- HTML кесте тегтерін PHP циклімен араластыру арқылы есепті ыңғайлы безендіруге болады.