2012-12-20 80 views
4

我有一個圖片表,用戶圖片用他們的ID和圖片物理鏈接進行保存。顯示來自每個用戶的三張圖片

userID | picture 
1  | picnameLink 
1  | picnameLink 
2  | picnameLink 
1  | picnameLink 
2  | picnameLink 
3  | picnameLink 

現在,我想表明在jQuery的圖片庫塊最多3張照片,其中一個塊應顯示來自同一個用戶的所有3張照片,如果用戶有小於3張,應該不顯示圖像文本。

我試過用mysql做的查詢組,但我沒有得到想要的結果。我必須使用兩個循環嗎?

- 編輯爲fthiella--這裏是代碼

$query = "SELECT * FROM pictures GROUP BY userID"; 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result)){ 
    $image_array[] = $row['picLink']; 
    $id_array[] = $row['pic_id']; 
} 
$num_images_to_display = 3; /* MODIFY TO REFLECT NUMBER OF IMAGES TO SHOW PER SCREEN */ 
$num_images = count($image_array); 
$image_path = "../images/"; /* MODIFY TO REFLECT THE PATH TO YOUR IMAGES */ 
$y = $num_images_to_display; 
if(!isset($_GET['first'])){ 
     $first = 0; 
    }else{ 
     $first = (int) $_GET['first']; 
} 
$x = $num_images - 1; 
$z = $x - $y; 
if($first>$z) { 
    $first = $z; 
} 
$last = $first + $num_images_to_display; 

這裏是HTML區域:

<div style="position:absolute; top:50px; left:100px; width:800px; text-align: center;"> 
    <?PHP 
    $i = $first; 
    while($i<$last) { $showme = $image_path . $image_array[$i]; ?> 

<?php if($image_array[$i]!="") { ?><img src="<?PHP echo $showme; ?>" width="176px" height="197px"><?php } else { ?><img src="../image/no_image.jpg" width="176px" height="197px"><?PHP } ?> 

    $prev = $first-1; 
    $next = $first +1; 
    if($prev<0){ $prev = 0; } 
    ?> 
</div> 

結果此查詢的顯示畫面組,但我希望每個的最大三張圖片用戶,如果用戶的圖像少於三個,則不顯示圖像。

+0

顯示您嘗試過的代碼。然後告訴我們它正在做什麼以及它與你想要做的不同之處。 –

+0

我沒有看到任何代碼,但你應該做的是編輯原始發佈並粘貼在那裏。 –

+0

對不起,安迪,我剛剛編輯我的主要問題,因爲我是新來的代碼。 – travis

回答

6

我不知道是否有更好的解決方案,但我認爲你可以這樣做:

SELECT p1.userID, p1.picture as pic1, p2.picture as pic2, p3.picture as pic3 
FROM 
    pictures p1 left join pictures p2 
    on p1.userID=p2.userID and p1.picture<>p2.picture 
    left join pictures p3 
    on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture 
GROUP BY p1.userID 

這會爲每個用戶選擇三個圖像。如果用戶的圖片少於三張,則會顯示空白,如果有多張,則會在所有圖片之間選擇三張。

的替代,這顯示三幅圖像每一個在不同的行,這是查詢,使得使用的變量:

SELECT userid, picture 
FROM (
    SELECT 
    userid, 
    picture, 
    case when @prec_id=userid then @row:[email protected]+1 else @row:=1 end as row, 
    @prec_id:=userid 
    FROM 
    `pictures`, 
    (SELECT @prec_id:=0, @row:=0) s 
    ORDER BY userid) s 
WHERE row<=3 

編輯:到時候,我會顯示每個用戶的三個圖像用我的第一次查詢,我會像這樣的代碼開始:

<?php 
$mysqli = new mysqli("localhost", "username", "password", "test"); 

$image_path = "../images/"; 
$no_image = "../image/no_image.jpg"; 

if(!isset($_GET['first'])){ 
    $first = 0; 
} else { 
    $first = (int) $_GET['first']; 
} 

if ($stmt = $mysqli->prepare("SELECT p1.userID, p1.picture as pic1, p2.picture as pic2, p3.picture as pic3 
FROM 
    pictures p1 left join pictures p2 
    on p1.userID=p2.userID and p1.picture<>p2.picture 
    left join pictures p3 
    on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture 
GROUP BY p1.userID 
LIMIT ?,1")) { 

    $stmt->bind_param("i", $first); 
    $stmt->execute(); 
    $stmt->bind_result($user, $pic1, $pic2, $pic3); 
    $stmt->fetch(); 
    $stmt->close(); 
} 
$mysqli->close(); 
?> 
<div style="position:absolute; top:50px; left:100px; width:800px; text-align: center;"> 
    <img src="<?PHP echo (isset($pic1) ? $image_path.$pic1 : $no_image); ?>" width="176px" height="197px"> 
    <img src="<?PHP echo (isset($pic2) ? $image_path.$pic2 : $no_image); ?>" width="176px" height="197px"> 
    <img src="<?PHP echo (isset($pic3) ? $image_path.$pic3 : $no_image); ?>" width="176px" height="197px"> 
</div> 

(它已經得到改善,但你可以用它開始我使用mysqli的,而不是MySQL的)

+0

這是否總是從一行中選擇.picture值?我會擔心p1.picture可能會選擇不同於p3.picture的分組行(導致它們相同)。 – 2012-12-20 20:51:46

+0

不錯,但說它是100,是否有替代方案的alised加入? – 2012-12-20 20:52:49

+0

@dagon我編輯並添加了一個替代方案,它使用變量,因此它不是標準的SQL,但僅適用於MySql – fthiella

相關問題