如何确定具有不同数据的字段的行号?

时间:2014-03-21 01:59:33

标签: php mysql

我有一张包含以下内容的表:

  

id,sender,recepients

     

1 1 2

     

2 1 2,3,4,5

在显示页面中,我必须将具有多于1个项目的接收者分别显示为具有独立行号的独立行。使用我的旧脚本,显示的显示是字段1,数字为1.字段2(多项)也以1开头。它应该继续字段1的数量。

当前显示:

  

no. id sender recepients

     

1. 1 1 2

     

1. 2 1 2 // the No. should be 2

     

2. 2 1 3

     

3. 2 1 4

     

4. 2 1 5

它的显示应该是:

  

no. id sender recepients

     

1. 1 1 2

     

2. 2 1 2

     

3. 2 1 3

     

4. 2 1 4

     

5. 2 1 5

当前代码:

$i=0;

while($r = mysql_fetch_array($a)) {

        $i++;

$tuj = explode(",",$r['recepients']);

for ($c=$i; $c < count($tuj)+$i; $c++) {

    //display data
}

问题:

我该怎么做才能确定线路数量?它是用SQL还是PHP完成的?

2 个答案:

答案 0 :(得分:1)

在MySQL中,假设接收者的数量不是太长,您可以使用暴力:

select t.id, t.sender,
       substring_index(substring_index(recipients, ',', n.n), ',', -1) as recipient
from table t cross join
     (select 1 as n union all select 2 union all select 3 union all select 4 union all select 5
     ) n
where n.n <= (1 + length(recipients) - length(replace(recipients, ',', ''));

where子句计算列表中的项目数。

答案 1 :(得分:0)

我认为以下是您想要做的事情 - 我用硬编码数组替换了数据库查找以进行测试,但您应该能够将foreach替换为您的while并且能够正常工作代码:

<?php
    $lineCount=1;

    echo "no.   id   sender  recepients\n";
    $a[0]=array('id'=>12, 'sender'=>123, 'recepients'=>"1");
    $a[1]=array('id'=>13, 'sender'=>124, 'recepients'=>"1,2,3");
    $a[2]=array('id'=>14, 'sender'=>125, 'recepients'=>"2,3,4,5,6");
    foreach ($a as $r) {
    //while($r = mysql_fetch_array($a)) {
      $tuj = explode(",",$r['recepients']);
      for ($c=0; $c < count($tuj); $c++) {
        echo $lineCount++."     ".$r['id']."    ".$r['sender']."      ".$tuj[$c]."\n";
      }
    }
?>

以上输出:

no.   id   sender  recepients
1     12    123      1
2     13    124      1
3     13    124      2
4     13    124      3
5     14    125      2
6     14    125      3
7     14    125      4
8     14    125      5
9     14    125      6

注意:

我使用了一个名为lineCount的变量来计算行数

我使用变量$c来计算$tuj数组中的元素。您将$c偏移$i,这在某种程度上混淆了使用$c作为行计数器或索引计数器。

如果您想编写易于调试的代码,清楚地命名变量会有所帮助......