2011-08-28 83 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到不同的表