2011-08-28 44 views
0

我被困在使用SQL和PHP从表中选择字段。在mysql问题中选择字段

我有一个名为invitations与这些字段的表:

  • receiverid1
  • receiverid2
  • ...
  • receiverid10

    • senderid

    我有不同的行相同senderid并且想要选择与其对应的receiverid

    一些receiversid可能为空,所以我只过滤非空值。

    这里是我的代码:

    $d1 = mysql_connect($dbhost,$dbuser ,$dbpass); 
    mysql_select_db($dbname, $d1); 
    
    /* fetching receivers */ 
    $q1 = mysql_query("select receiverid1,receiverid2,receiverid3,receiverid4, 
         receiverid5,receiverid6,receiverid7,receiverid8,receiverid9,receiverid10 
         from invitations 
         where senderid = '528495538' ", $d1); 
    
    while($row = mysql_fetch_array($q1)) 
    { 
        $totalreceivers = count(array_filter($row)); 
        $receivers[] = array_filter($row); 
    
    } 
    echo '<br>';  
    echo "the receivers"; 
    echo '<br>'; 
    print_r($receivers); 
    echo '<br>'; 
    echo $totalreceivers; 
    

    通过上述发件人ID,在桌子上我有2行,但是当我执行的代码中,我得到的只有一个:

    接收机Array ([0] => 1743650643 [receiverid1] => 1743650643) 2

    任何形式的帮助将不胜感激,谢谢。

  • 回答

    2

    $recievers到一个数组,并且$totalreceivers成从0开始一个int,并在循环之前声明它们。您重新分配他们在每个循环,而不是增加他们:

    $totalreceivers = 0; 
    $receivers = array(); 
    while($row = mysql_fetch_assoc($q1)) { 
        $filtered = array_filter($row); 
        $totalreceivers += count($filtered); 
        $receivers[] = $filtered; 
    } 
    

    注意,它是更有效地打电话array_filter()一次,并将其分配给一个变量比它两次调用它的各项操作。此外,特别是对于上述操作,请使用mysql_fetch_assoc()而不是mysql_fetch_array()

    编辑看看这更像是你想要的东西(略固定)...

    $receivers = array(); 
    while($row = mysql_fetch_assoc($q1)) { 
        foreach (array_filter($row) as $item) { 
        $receivers[] = $item; 
        } 
    } 
    $totalreceivers = count($receivers); 
    
    +0

    坦克的答复我复制你的代码。并得到2个如表中所示的peersid。但有一个数组,每个元素里面是另一个数组!我只想要一个数组。我该怎么做 ? – user888300

    +0

    每列中的数据是什么?有没有可能重新出现? – DaveRandom

    +0

    看到我上面的编辑... – DaveRandom

    0

    更新它喜欢:

    while($row = mysql_fetch_array($q1)) 
    { 
    $totalreceivers += count(array_filter($row)); 
    $receivers[] = array_filter($row); 
    
    } 
    echo '<br>';  
    echo "the receivers"; 
    echo '<br>'; 
    print_r($receivers); 
    
    +2

    更好的做一个隐阵推像'$接收机[]',而不是担心'$ i'计数器 –

    +0

    okkkkkk ......... – mithunsatheesh

    +0

    ...我会想象OP希望'$ totalreceivers'是一个运行总数,而不是'while'最后一次迭代的计数... – DaveRandom

    0

    你的表定义显然是错误的。

    你应该将receiverids到不同的表