Есть ли способ создать foreach для кода SQL с массивом данных - PullRequest
1 голос
/ 29 мая 2019

Я получил один запрос, который принимает данные о пользователях.

Мне нужно сделать второй запрос для каждого из этих пользователей.

Я получаю данные только для первого пользователя.(со вторым запросом)

Первый запрос:

$query = mysqli_query($conn, "SELECT * FROM tipuser WHERE permissions = '0'");
$ah = mysqli_fetch_array($query);

Также, когда я делаю для каждого ($ query as $ x) и внутри него я повторяю имя и фамилию, которые он показывает всем,когда я делаю то же самое с $ ah, он ничего не показывает.

Затем я получаю эти переменные:

$firstname = $ah['firstname'];
$lastname = $ah['lastname'];

Второй запрос:

$sqlwork = mysqli_query($conn, 
        "SELECT DATE_FORMAT(datum, '%b %Y') AS Monthyear, 
                count(projekt) AS celkem, 
                SUM(projekt = 0) AS tipsport,  
                SUM(projekt = 1) AS slavia, 
                SUM(projekt = 2) AS bet 
        FROM zapasy 
        WHERE komentator1 = '$firstname $lastname' 
           OR komentator2 = '$firstname $lastname' 
        GROUP BY Monthyear");

Я думаюпроблема где-то в массиве, но я не могу найти его.Я благодарен за любую помощь.

ОБНОВЛЕНИЕ: вот как это отобразить на сайте:

         <?php foreach($query AS $usersall) {?>
           <table id="tablePreview" class="table table-hover table-sm table-bordered" style="border-top: 0px solid hsl(0, 0%, 87%);">


    <thead style="color:black; background-color: hsla(0,0%,71%,1.00); border-top: 0px solid hsl(0, 0%, 87%);">
        <tr>
            <th scope="col">Měsíc</th>
            <th scope="col">Zápasů</th>
            <th scope="col">BET</th>
            <th scope="col">TipSport</th>
            <th scope="col">Slavia</th>
            <th scope="col">Brutto</th>
            <th scope="col">Daň</th>
            <th scope="col">Netto</th>
            <th scope="col">Zaplaceno</th>
        </tr>
    </thead>
    <tbody>
        <?php while ($tip = mysqli_fetch_assoc($sqlwork)) {?>
        <tr>
            <td>
                <?=$tip['Monthyear'] ?>
            </td>
            <td>
              <?=$tip['celkem']?>
            </td>
            <td>
                <?=$tip['bet']?>
            </td>
            <td>
                <?=$tip['tipsport']?>
            </td>
            <td>
                <?=$tip['slavia']?>
            </td>
            <td>
                <?php 
                        $betx = $tip['bet']*$bet1cena['cena'];
                        $tipx = $tip['tipsport']*$tipcena['cena']; 
                        $slax = $tip['slavia']*$slaviacena['cena']; 
                        $celkem = $betx+$tipx+$slax;
                        echo "$celkem Kč";
                ?>
            </td>
            <td>
                <?php
                        if($user['fakturuje'] == 0){
                            $dan = $celkem*0.15;
                            echo "$dan Kč";

                        }else{
                            echo "0 Kč";
                        }                                   
                ?>
            </td>
            <td>
                <?php
                   $netto = $celkem-$dan;
                   echo "$netto Kč"; 
                ?>
            </td>
            <td>
                <input type="checkbox">
            </td>
        </tr>

        <?php } ?>
    </tbody>
</table>
<?php }?>

1 Ответ

0 голосов
/ 29 мая 2019

Хотя из вашего вопроса не совсем ясно, я думаю, что вы получаете несколько строк из первого запроса и хотите запустить второй запрос для каждой строки, возвращаемой первым запросом

Это один способ, я взял на себя смелость использовать подготовленный запрос для второго, это должно устранить любые проблемы с SQL-инъекцией, а также любые проблемы с фамилиями, такими как O'Toole (проблема апострофа). Это также означает, что вам нужно скомпилировать запрос только один раз, но вы можете запускать его с новыми параметрами столько раз, сколько вам нужно.

$q1 = mysqli_query($conn, "SELECT * FROM tipuser WHERE permissions = '0'");

$q2 = "SELECT DATE_FORMAT(datum, '%b %Y') AS Monthyear, 
                count(projekt) AS celkem, 
                SUM(projekt = 0) AS tipsport,  
                SUM(projekt = 1) AS slavia, 
                SUM(projekt = 2) AS bet 
        FROM zapasy 
        WHERE komentator1 = ? 
           OR komentator2 = ? 
        GROUP BY Monthyear");

$stmt2 = $conn->prepare($q2);

while ($ah = mysqli_fetch_array($q1) ) {

    // make the full name field
    $name = $ah['firstname'] . ' ' . $ah['lastname'];

    // bind those values to the prepared query
    $stmt2->bind_param('ss', $name, $name );
    $stmt2->execute();

    // present the results of this query
    // however you like
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...