Лекция · 5.9

Есеп беру құралдары

10-сыныптың информатика курсын осы соңғы сабақпен қорытындылаймыз! Дүкен иесі айдың соңында «қай тауар қанша сатылды, пайда қанша болды» дегенді қалай біледі? Деректер қорынан ШИКІ деректі емес, ДАЙЫН, безендірілген есепті алады. Бүгін дәл осы есеп құру процесін және оны бұғаттаудың неге қажет екенін үйренеміз.

Есеп және бұғаттау
Анықтама
Есеп (report) — экранға, баспаға немесе файлға шығарылатын деректердің ФОРМАТТАЛҒАН түрі. Деректер қорынан қажетті деректі алып, ыңғайлы түрде ұсынуға мүмкіндік береді.

Есеп жасалып жатқанда, деректер қоры «тыныш» тұрмайды — банк қызметкері есеп шығарып жатқанда, тұтынушы сол сәтте банкоматтан ақша алуы мүмкін! Осындай қайшылықты болдырмау үшін арнайы механизм бар:

Анықтама
Бұғат (locking) — деректер қорын БІР МЕЗГІЛДЕ бірнеше қолданушының қолдануын басқару механизмі.
ӘдісСипаттамасы
Жазу/оқу бұғатыЖазушы жазу бұғатын сұрайды; оқу бір мезгілде бірнешеуге рұқсат етіледі, бірақ жазу аяқталғанша күтеді
Нұсқаны бақылау (versioning)Оқырманға деректің ӨЗГЕРІССІЗ нұсқасы кепілдендіріледі, бұғат қажет емес

Бұғаттаудың үш ДЕҢГЕЙІ бар — не мөлшерде «құлыпталатынына» қарай:

ДеңгейСипаттамасы
Кестені бұғаттауБүкіл кестені бір мезгілде өзгертуден сақтайды
Бетті бұғаттауКестенің бір бетін ғана сақтайды
Жолды бұғаттауКестенің бір жолын ғана сақтайды (ЕҢ ДӘЛ деңгей)
Web-негізіндегі есеп

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 ... ?> ішінде цикл ашылып, HTML бөлігі циклдің ӘР қадамында қайталанады, содан кейін цикл <?php } ?> арқылы жабылады.
🎯 ҰБТ байланысы
Бұғаттау деңгейлері мен есеп құру логикасын түсіну маңызды.
1
Кесте/бет/жол бұғаттау деңгейлерін ажырата білу.
2
LEFT JOIN — бірнеше кестедегі деректі бір есепте біріктіру үшін қолданылады.
3
PHP циклінде HTML кодын аралас қолдану — есепті кесте түрінде безендірудің негізгі тәсілі.
Сабақ қорытындысы
  • Есеп — деректі формматтап, экранға/баспаға/файлға шығару құралы.
  • Бұғаттау (locking) — есеп жасалып жатқанда деректің қайшылықсыз болуын қамтамасыз етеді.
  • Web-негізіндегі есеп PHP + SQL арқылы, LEFT JOIN көмегімен бірнеше кестені біріктіріп жасалады.
  • HTML кесте тегтерін PHP циклімен араластыру арқылы есепті ыңғайлы безендіруге болады.