2012-09-05 57 views
0

我在mysql數據庫中有列a,b,c & d(爲了簡單起見)。在mysql數據庫中獲取多行

  • 列一個是用戶ID爲#(非唯一)
  • b欄是文件路徑
  • c欄是 「組ID」
  • 列d是上載日期/時間

同時上傳的文件分別與每個數據庫條目存儲相同的「組ID」。

首先,我運行以下查詢:
SELECT * FROM database WHERE a='$userid' ORDER BY d DESC

然後,我利用在while循環到數據饋送到一個列表(指定ID的mysqli_fetch_assoc功能,通過上載日期排序,如圖所示以上)。

我的問題是,我需要將那些在相同的獲取輸出中具有相同「組ID」的組進行分組。這是可能的一個子查詢的種類,或者我正在做這個完全不足?如果有PDO的替代方案,會更好地工作,我很高興地看到,以及..

編輯:爲了給這個問題更多一點的定義, 請找代碼如下設置:

因此,具有相同組ID的那些條目應該被放置在相同的<li>

<body> 
    <ul><?=$output?></ul> 
</body> 

$userid = $_SESSION['id']; 
$output=''; 
$q = mysqli_query("SELECT * FROM database WHERE a='$userid' ORDER BY d DESC"); 

while($row=mysqli_fetch_assoc($q)){ 
    $output.=formatfxn($row['b'],$row['c'],$row['d']); 
} 

function formatfxn($filep,$groupid,$dt){ 
    if(is_string($dt)){ 
     $dt=strtotime($dt); 
     if(is_file($filep) === true){ 
      $filel='<img class="postimg" src="'.$filep.'" />'; 
     } 
    return '<li>'.$filel.'</li>'; 
    } 
} 
+0

顯示您的當前代碼,所以我們可以幫助您。 – Jocelyn

+0

@Jocelyn根據你的評論添加。謝謝。 – Craig

回答

2

從你的問題,目前還不清楚你到底想要什麼。但是,你似乎希望你的上傳元素以組ID的方式組織起來。

對不起,我不打算處理名爲a,b,c,d的列。

你可以這樣做:

SELECT * 
    FROM datatable 
    WHERE user_id='$userid' 
ORDER BY group_id DESC 

這將使你在降組ID爲了您的項目。如果實際上具有相同group_id的項目具有相同的upload_time,並且如果按順序分配了group_id值,這將對您有用。

你是否需要爲每個group_id值獲取一行?你可以試試這個:

SELECT user_id, 
      group_id, 
      MIN(upload_time) upload_time, 
      GROUP_CONCAT(filepath 
         ORDER BY upload_time, filepath 
         SEPARATOR ';') filepaths 
    FROM datatable 
    WHERE user_id=1 
GROUP BY user_id, group_id 
ORDER BY upload_time DESC 

http://sqlfiddle.com/#!2/4f2df/1/0

這會給你用分號分隔在一個文本字段中輸入文件路徑。行和文件名將按每個組中第一個項目的更新時間排序。

+0

Ollie,這很有趣!我會很快嘗試你的建議。 – Craig

+0

有了一些額外的功能,這完成了我正在尋找的東西。非常感謝。 – Craig

0

所有代碼首先是PDO,所以如果你使用的是PDO是不正確的語法

我會做這樣的事情(如果我理解正確的,你是一個有點含糊)

$st= $db->prepare("SELECT * FROM database WHERE a=? ORDER BY d DESC"); 
$st->setFetchMode(PDO::FETCH_ASSOC); 
$data=array($userid); 
$st->execute($data); 
while($something=$data->fetch()){ 

//handle $something as you want. 
} 

我會建議做一些像數組唯一(搜索它)的id,然後你會得到每個id的關聯數組。

在這裏我還發現了一些可以幫助你的東西(與我的評論並行):Array Unique with Associative Array - Remove Duplicates接受的答案可以解決你的問題。 (+1那傢伙)

+0

我已經標記了PDO,試圖提出最好的答案,無論是在mysqli還是PDO。正如你所看到的,不,它目前不使用PDO。 – Craig

+0

使用它,它比mysqli好得多,並沒有那麼難。從mysql-> mysqli比myslq-> PDO mysql更麻煩。 也看到這個http://php.net/manual/en/function.array-unique.php 在正確的操作,而你可以得到預期的結果 – MayTheSchwartzBeWithYou

+0

彼得,感謝您的持續努力!我認爲在我的問題的溝通方面可能存在差距。實際上,我不僅希望使用相同的組ID將條目保留,而且將它們組合在一起。 – Craig