Multiple query data into single HTML Table (PHP, MySQL)

前端 未结 3 1912
夕颜
夕颜 2021-01-23 11:18

Here is my current code. I\'m trying to display data from three separate queries into a single table with multiple columns. Is my while statement wrong here? It\'s printing 1 ta

相关标签:
3条回答
  • 2021-01-23 11:36

    This will require opening three separate connections to MySQL aтв running three queries, each in its own connection.

    You better rewrite your query as this

    SELECT  user_id,
            (
            SELECT  COUNT(*)
            FROM    posts p
            WHERE   p.user_id = u.user_id
                    AND p.date >= '2010-06-01'
                    AND p.date < '2010-07-01'
            ) AS june_count,
            (
            SELECT  COUNT(*)
            FROM    posts p
            WHERE   p.user_id = u.user_id
                    AND p.date >= '2010-07-01'
                    AND p.date < '2010-08-01'
            ) AS july_count,
            (
            SELECT  COUNT(*)
            FROM    posts p
            WHERE   p.user_id = u.user_id
                    AND p.date >= '2010-08-01'
                    AND p.date < '2010-09-01'
            ) AS aug_count
    FROM    users u
    
    0 讨论(0)
  • 2021-01-23 11:53

    The while loop is taking an OR clause. This means if the first one returns true, it won't execute the second one.

    0 讨论(0)
  • 2021-01-23 11:57
    $data = array();
    
    while($row = mysql_fetch_assoc($july)) {$data['row'][] = $row;}
    while($row = mysql_fetch_assoc($aug))  {$data['row2'][] = $row;}
    while($row = mysql_fetch_assoc($sept)) {$data['row3'][] = $row;}
    
    $count = count($data['row']);
    
    for($i=0;$i<=$count;$i++)
    {
        echo '<tr>';
            if(($i % 3) == 1)
            {
                echo "<td>" . $data['row3'][$i]['cUsername'] . "</td>";
                echo "<td>" . $data['row3'][$i]['postCount'] . "</td>";
            }else if(($i % 2) == 1)
            {
                echo "<td>" . $data['row2'][$i]['cUsername'] . "</td>";
                echo "<td>" . $data['row2'][$i]['postCount'] . "</td>";
            }else /*Never try find remainder of 1 as theres always a multiple of 1*/
            {
                echo "<td>" . $data['row'][$i]['cUsername'] . "</td>";
                echo "<td>" . $data['row'][$i]['postCount'] . "</td>";
            }
        echo '</tr>';
    }
    

    By fetching the results individually into a local array instead of trying to fetch 3 different rows at the same time you should do them individually and store them in a local variable, just unset the variable after words if its a large array.

    my code is offered as untested.

    0 讨论(0)
提交回复
热议问题