2014-10-18 129 views
2

我想知道是否有人可以幫我解決我的問題,如下所示: 我想拉一次屬於posts.text的posts.text和uids,但是當我執行它下面的代碼是這樣的:例如。有4個uid屬於帖子,所以我得到posts.text四次而不是一次。SQL LEFT JOIN不重複相同的行值

$query = mysqli_query($con, 
        "SELECT posts.text, relationships.uidb 
        FROM posts 
        LEFT JOIN relationships 
        ON posts.uid=relationships.uida 
        LIMIT 10"); 

if(mysqli_num_rows($query) > 0){ 
while($row = mysqli_fetch_assoc($query)){ 
    echo $row['text']." ".$row['uidb']."<br>"; 
} 
} 

我真的很感激任何幫助。 感謝提前。 彼得

更新: 所需的輸出會是這樣的:

postsArray[0]->text = //post text 
postsArray[1]->text = //another post text 
postsArray[0]->uids[0] = //approved uid for first post 
postsArray[0]->uids[1] = //another approved uid for first post 

現在它輸出這樣的: 文本10 文本15 文本12

,我想這一點: 文本10, 15,12

+1

但有4個關係......你想要哪個?如果你想單獨加載文本,那麼它就會工作,否則這是一個關係數據庫,它會讓你回到你要求的東西。或者,如果您不希望返回,您是否可以提供一些樣本輸入數據和期望的輸出? – Ben 2014-10-18 16:59:36

+0

所以,你只需要'每個'文本'(和哪個1)'uidb''或者你想每個'文本'全部'uidb'? – Sean 2014-10-18 16:59:41

+0

我想要所有的uidb和一個文本 – 2014-10-18 17:01:18

回答

3

的一種方法是使用MySQL的GROUP_CONCAT其提供逗號分隔值列表爲每個基團,即(p.uid)

$query = mysqli_query($con, 
    "SELECT p.text, GROUP_CONCAT(r.uidb SEPARATOR ', ') uidbs 
    FROM posts p 
    LEFT JOIN relationships r 
    ON p.uid=r.uida 
    GROUP BY p.uid 
    LIMIT 10"); 

if (mysqli_num_rows($query) > 0) { 
    while ($row = mysqli_fetch_assoc($query)) { 
     echo $row['text'].' '.$row['uidbs']; 
     /*$uidbs= explode($row['uidbs'],','); 
     foreach ($uidbs as $key => $val) { 
      echo $val.' '; 
     }*/ 
     echo '</br>'; 
    } 
} 

根據docs將結果截斷爲 由group_concat_max_len系統變量給出的最大長度,該系統變量的默認值爲1024. 該值可以設置得更高,但返回值的有效最大長度受 max_allowed_pa​​cket的值。

+1

非常感謝,我要測試它 – 2014-10-18 17:22:06

0

也許這可能適合你:

$query = mysqli_query($con, 
        "SELECT posts.text, relationships.uidb 
        FROM posts 
        LEFT JOIN relationships 
        ON posts.uid=relationships.uida 
        GROUP BY posts.uid 
        LIMIT 10"); 

if(mysqli_num_rows($query) > 0){ 
while($row = mysqli_fetch_assoc($query)){ 
    echo $row['text']." ".$row['uidb']."<br>"; 
} 
} 
0
SELECT posts.text, relationships.uidb 
       FROM posts 
       LEFT JOIN relationships 
       ON posts.uid=relationships.uida 
       GROUP BY posts.primary_key_of_your_post 
      LIMIT 10 
-1

您應該致電2個查詢。在你的第一個查詢中,調用文本,然後調用uids。

您不應該編寫複雜的查詢,因爲這會使您的業務更加複雜,並且您將來無法維護您的代碼。

+0

這遠不是一個複雜的查詢。 .. – Ben 2014-10-18 17:30:33