【问题标题】:How can i make a table while fetch assoc我如何在获取 assoc 时制作表格
【发布时间】:2015-10-28 10:35:41
【问题描述】:

您好,我是(开始)php 后端开发人员,我正在开发 dj 面板,但它不能以正确的方式工作,我尝试了尽可能多的东西,但我无法让它工作..

    $active_ids = '1, 3, 4';

    $query = "SELECT * FROM users WHERE id IN ({$active_ids})";
    $result = $mysqli->query($query);   

    $query2 = "SELECT dj, count(*) AS n FROM timetable WHERE dj IN ({$active_ids}) GROUP BY dj";
    $result2 = $mysqli->query($query2);

        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()){
                echo "<tr>";
                echo "<td>", $row['username'] ,"</td>";
            }

            if ($result2->num_rows > 0) {
                while($row2 = $result2->fetch_assoc()){
                echo "<td>", $row2['n'] ,"</td>";
                echo "</tr>";
                }
            }
        }

这就是它所显示的

ZOMBOY
Hater
ZOMBOY2 3
1
1

这就是它需要变成的样子,但我找不到办法做到这一点

ZOMBOY    3
Hater     1
ZOMBOY2   1

【问题讨论】:

  • 您需要进行join 查询才能显示结果。
  • 它被分组了,所以我不知道如何正确地做到这一点@Kamran

标签: php mysql sql mysqli


【解决方案1】:

您可以使用join 代替查询两个表

$active_ids = '1, 3, 4';

$query = "SELECT u.username, count(*) AS n FROM users u, timetable tt WHERE u.id=tt.dj and u.id IN ({$active_ids}) GROUP BY tt.dj";
$result = $mysqli->query($query);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()){
        echo "<tr>";
        echo "<td>", $row['username'] ,"</td>";
        echo "<td>", $row['n'] ,"</td>";
        echo "</tr>";
    }
}

【讨论】:

    【解决方案2】:

    你可以这样做,但必须看Joins

    $active_ids = '1, 3, 4';
    
    $query = "SELECT * FROM users WHERE id IN ({$active_ids})";
    $result = $mysqli->query($query);   
    
    $query2 = "SELECT dj, count(*) AS n FROM timetable WHERE dj IN ({$active_ids}) GROUP BY dj";
    $result2 = $mysqli->query($query2);
    $columnOne = Array();
    $columnTwo = Array();
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()){
            $columnOne[]= $row['username'];
        }
    
        if ($result2->num_rows > 0) {
            while($row2 = $result2->fetch_assoc()){
                $columnTwo[] = row2['n'];
            }
        }
    }
    echo '<table>';
    for($i=0;$i<count($columnOne);$i++){
        echo '<tr><td>' . $columnOne[$i] . '</td><td>' . $columnTwo[$i] . '</td></tr>';
    }
    echo '</table>';
    

    【讨论】:

    • 我说它是分组的,所以我不知道如何正确加入它
    • 在页面源中有,
    • 第二个问题是查询返回任何结果
    • 测试数组print_r ($columnOne);print_r ($columnTwo);
    • 它 echo 的 array() array()
    【解决方案3】:

    你可以尝试这样的事情(不像其他人那么优雅):

    # Escape your characters
    $active_ids = "'1', '3', '4'";
    
    # Tidy up the querys to reduce the change of reserved words being used
    $query = "SELECT * FROM `users` WHERE `id` IN ({$active_ids});";
    $result = $mysqli->query($query);   
    $query2 = "SELECT `dj`, COUNT(*) AS n FROM `timetable` WHERE `dj` IN ({$active_ids}) GROUP BY `dj`";
    $result2 = $mysqli->query($query2);
    
    # Count your results
    $c1 = count($result); 
    $c2 = count($result2);
    #Set the counter to be the larger of the 2
    $counter = (($c1 > $c2) ? $c1 : $c2);
    if ($result->num_rows > 0 && $result2->num_rows > 0)
    {
        # Print the table opener
        print '<table class="your_class">';
        # Loop through your results
        for ($i = 0; $i < $counter; $i++)
        {
            # Print the data needed
            print '<tr><td>' . $result[$i]['username'] . '</td><td>' . $result2[$i]['n'] . '</td></tr>';
        }
        # End the table
        print '</table>';
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 2013-09-12
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多