使用PHP按类别排序MYSQL结果

时间:2013-12-26 18:29:47

标签: php mysql foreach

这就是事情。我正在尝试对我的漫画集合进行排序。到目前为止,我有两个表,一个用于漫画的标题和类型(ID,前缀,标题,类型),另一个用于每个问题的个人信息(ID,标题,卷,发行号,值)。

我要做的第一件事就是将问题的标题与标题表中的相应标题联系起来。

我这样做:

SELECT * FROM comics, comicstitles WHERE comics.comTitle = comicstitles.titID ORDER BY comicstitles.titTitle ASC

我得到的是一堆整齐的行,我得到的结果如下:

<table class='simple-list'>
<thead>
    <tr>
        <th>Title</th>
        <th>Volume</th>
        <th>Issue</th>
        <th>Value</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>Alpha Flight</td>
        <td>1</td>
        <td>1</td>
        <td>$4.00</td>
    </tr>
    <tr>
        <td>Alpha Flight</td>
        <td>1</td>
        <td>2</td>
        <td>$3.00</td>
    </tr>
    <tr>
        <td>Machine Man</td>
        <td>2</td>
        <td>1</td>
        <td>$2.00</td>
    </tr>
    <tr>
        <td>Wolverine</td>
        <td>1</td>
        <td>2</td>
        <td>$35.00</td>
    </tr>
    <tr>
        <td>Wolverine</td>
        <td>1</td>
        <td>1</td>
        <td>$60.00</td>
    </tr>
    <tr>
        <td>The X-Men</td>
        <td>1</td>
        <td>115</td>
        <td>$100.00</td>
    </tr>
    <tr>
        <td>The X-Men</td>
        <td>1</td>
        <td>116</td>
        <td>$100.00</td>
    </tr>
    <tr>
        <td>The X-Men</td>
        <td>1</td>
        <td>111</td>
        <td>$100.00</td>
    </tr>
    <tr>
        <td>The X-Men</td>
        <td>1</td>
        <td>114</td>
        <td>$100.00</td>
    </tr>
    <tr>
        <td>The X-Men</td>
        <td>1</td>
        <td>109</td>
        <td>$160.00</td>
    </tr>
    <tr>
        <td>The X-Men</td>
        <td>1</td>
        <td>112</td>
        <td>$100.00</td>
    </tr>
</tbody>
<tfoot>
    <tr>
        <td colspan='4'><h3>Total: $764.00</h3></td>
    </tr>
</tfoot>

现在,我想做的是一个foreach,它会给我一些类似的东西:

对于每个标题,打印标题一次以及下面的所有个别问题。

我最终会得到类似的东西:

TITLE
Issue number
Cover
Issue number
Cover

TITLE
Issue number
Cover

TITLE
Issue number
Cover
Issue number
Cover
Issue number
Cover
Issue number
Cover

我试过一遍又一遍,但我总是最终使用Wordpress,Joomla或Drupal网站。

任何其他结果都是过于抽象或使用数字。

4 个答案:

答案 0 :(得分:0)

您可以通过跟踪标题并将其与当前标题进行比较,轻松地按标题对项目进行分组。

像(简单示例):

// before your loop
$title = '';

  // in your loop
  if ($row['title'] === $title) {
    // title already shown, do nothing or echo an &nbsp;
  } else {
    // new title, set and print it
    $title = $row['title'];
    echo htmlspecialchars($title);
  }

你没有在任何地方提到封面,所以在你试过它之前不可能提供帮助,显示代码以及确切的问题。

答案 1 :(得分:0)

您尝试做的事情有几种方法。一种方法是你也阅读漫画ID然后你“for-each”结果并将它们放在一个ID为Array-Index的数组中。

foreach ($rows as $row)
    $arr[$row['titID']][] = $row;

如果您不需要进一步使用数据,则可以执行

$active_id = $titID;
foreach ...
    //if the current eached title-id has changed (not = $active_id)
    //then set $active_id = new-title-id and start a new row

答案 2 :(得分:0)

你可以有一个数组,其中每个标题都有一个数组。

$titles = array();
while ($row == $result->fetch_assoc()) {
  if (array_key_exists($row['Title'], $titles)) {
    array_push($titles[$row['Title']], $row);
  }
  else {
    $titles[$row['Title']] = array($row);
  }
}
foreach ($titles as $title=>$rows) {
  echo $title . '<br>';
  foreach ($rows as $row) {
    echo $row['IssueNumber'] . '<br>' . $row['Cover'] . '<br>';
  }
}

答案 3 :(得分:0)

//Database Connection
mysql_connect("localhost", "username", "password") or die(mysql_error()); 

//Database selection
mysql_select_db("Database_Name") or die(mysql_error()); 

//your query
$data = mysql_query("SELECT * FROM comics, comicstitles WHERE comics.comTitle = comicstitles.titID ORDER BY comicstitles.titTitle ASC") 
or die(mysql_error()); 

$temp_title="";
while($info = mysql_fetch_array( $data )) 
{        
    $temp_title = $info['comicstitles'];
    if(($temp_title == $info['comicstitles']))
    {         
        echo "<tr>"; 
        echo "<td>".$info[comics]."</td>";
        echo "</tr>";
    }
    else
    {
        echo "<tr>"
        echo "<td>".$info[comicstitles]."</td>"
        echo "</tr>"
        echo "<tr>"; 
        echo "<td>".$info[comics]."</td>";
        echo "</tr>";   
    }

}