2017-08-09 57 views
0

好了所以在試圖解決10個大三學生的問題後,我不太清楚如何解決它。MySQL選擇只有屬於在特定頁面上查看的帖子的評論(使用LIMIT分頁)

我有1個MySQL查詢從數據庫中拉出所有10 最新的帖子,並從帖子表中將它們呈現在博客頁面的第0頁。我使用帶偏移量的LIMIT,以便PHP每頁只能顯示10個帖子。 這偉大工程:

$sql = " 
SELECT u.name 
    , u.avatar 
    , p.id 
    , p.user_id 
    , p.title 
    , p.article 
    , DATE_FORMAT(p.set_in,'%d/%m/%Y') date 
    , DATE_FORMAT(p.last_edited,'%d/%m/%Y->%H:%i') edited 
    , p.genre 
    , p.band_image 
    , p.albums 
    FROM posts p 
    JOIN users u 
    ON u.id = p.user_id 
ORDER 
    BY p.set_in DESC 
LIMIT $offset, $rec_limit 
"; 

現在我希望MySQL只選擇誰屬於哪個目前我收到的評論,而不是拉動所有的意見,並使用PHP對崗位的相關ID匹配他們,但由於某種原因,我似乎無法破解它。 基於事實可以刪除的事實,我不能使用ID範圍的一些靜態邏輯。

現在這是我的查詢,但它是一個非常糟糕的一個,也不會保持更大的網站:

$sql3 = "SELECT u.name,u.avatar,p.id,p.user_id,DATE_FORMAT(c.post_date,'%d/%m/%Y->%H:%i') date, c.ctitle, c.comment, c.id, c.user_id, c.post_id cid FROM comments c " 
      . " JOIN users u ON u.id = c.user_id " 
      . " JOIN posts p ON c.post_id = p.id " 
      . " ORDER BY c.post_date DESC"; 

這是意見表:

id post_id user_id ctitle comment post_date 
1 40 1 hinew hinew 2017-08-08 00:41:10 
3 40 1 Another Comment test comment 2017-08-08 00:49:15 
4 45 20 How are you fine 2017-08-08 01:06:30 
5 1 1 aftersomefix yeahhhh 2017-08-08 01:14:12 
6 1 26 dsfgdfg dfgdfg 2017-08-08 01:14:58 
7 45 1 TEST TEST 2017-08-08 20:42:38 

這是帖子表:

id user_id title article set_in  last_edited genre band_image albums 
1 1 Demo Text This is the first post demo text 2017-08-05 18:40:55 2017-08-07 21:17:04 yoyo 2017.08.07.20.17.04-02aacec988bf439c277e2a2b611a23... popo  
18 19 This is a test test 2017-08-06 18:43:57 2017-08-07 21:18:11 another test 2017.08.07.20.18.11-177120fbd1a8951e2a70907f5600e5... wow this is a test 
19 20 This is a 3ed TEST 2017-08-06 18:49:10 2017-08-07 21:19:14 So many test moses 2017.08.07.20.19.14-17362774_10154643389487979_824... yes i know we have many tests 
38 1 rtyrtyrty asdasd 2017-08-07 15:19:57 2017-08-07 21:14:56 Metalcore 2017.08.07.20.14.56-17098309_963035173797767_82275... aert 
jhkghjk 
aertaert  
39 1 Dude Yes I think it does! 2017-08-07 19:54:21 2017-08-07 21:11:47 Is this actually working? 2017.08.07.19.00.53-81c0e26d68e0d29ceb619758e164da... hi 
40 1 Test albums This is a decp 2017-08-07 20:16:26 2017-08-07 21:11:23 albums genre 2017.08.07.20.01.50-tenor.gif one,two,tree,four,five,789789,lol 
41 1 BAND EX 1 DESC EX 1 2017-08-08 00:27:45 0000-00-00 00:00:00 GENRE EX 1 2017.08.07.23.27.45-19399240_10158895409495261_149... EX 1  
42 1 Band ex2 Desc ex 2 2017-08-08 00:28:19 0000-00-00 00:00:00 Genre ex2 2017.08.07.23.28.19-13240136_1004564029622092_8185... ex 2  
43 1 Name 3 Desc 3 2017-08-08 00:28:52 0000-00-00 00:00:00 Genre 3 2017.08.07.23.28.52-reptilian-death-the-dawn-of-co... 3 
44 1 Name 4 4 2017-08-08 00:29:15 0000-00-00 00:00:00 4 2017.08.07.23.29.15-Best Melodic Death Metal Cover... 4 
45 1 WHAT hehe 2017-08-08 00:31:52 0000-00-00 00:00:00 MURDER 2017.08.07.23.31.52-Best Melodic Death Metal Cover... cool 

我試圖做一個在哪裏沒有爲我工作和作爲SQL noobie我不能找到任何包含分頁因子的相關解決方案。

+0

將您的第一個查詢用作子查詢並將其與評論表一起使用。 –

+0

既然你在一個頁面上顯示它,我只會在兩個單獨的查詢中加載文章和評論,你應該有一個循環,通過所有的反正,所以你可以創建一個評論查詢每個帖子的帖子ID。 – xander

+0

我已經有一個循環,但我更關心如何從MySQL獲取確切的數據,所以如果我有10000條評論,這不會永遠持續下去。 我會嘗試@PaulSpiegel –

回答

0

從您的第一個查詢中除去p.id之外的所有內容,並將其用作子查詢。然後將其與評論表一起加入:

SELECT c.*, u.* -- select the columns you need 
FROM comments c 
JOIN users u ON u.id = c.user_id 
JOIN (
    SELECT p.id -- other columns if needed in the outer query 
    FROM posts p 
    ORDER BY p.set_in DESC 
    LIMIT $offset, $rec_limit 
) p ON p.id = c.post_id 
+0

的解決方案所以我真的試圖運行這個查詢,但似乎沒有工作有關字段列表中的帖子。 我試過脫掉別名,但它仍然無法識別posts.user_id和sometiems posts.id出於某種原因,這是我的查詢: SELECT u.name,u.avatar,p.id,p.user_id, DATE_FORMAT(c.post_date,'%d /%m /%Y - >%H:%i')cdate,c.ctitle,c.comment,c.id,c.user_id,c.post_id cid FROM comments c JOIN用戶U ON u.id = c.user_id JOIN( SELECT posts.id FROM帖子 ORDER BY posts.set_in DESC LIMIT 1,10)的帖子ON posts.id = c.post_id –

+0

對不起,這是查詢,上面的一個關閉了。 SELECT u.name ,u.avatar ,p.id ,p.user_id ,p.title ,p.article ,DATE_FORMAT(p.set_in, '%d /%米/%Y')日期 ,DATE_FORMAT(p.last_edited, '%d /%米/%Y - >%H:%I')編輯 ,p.genre ,p.band_image ,p.albums ,c.ctitle,C。評論,c.id,c.user_id,c.post_id cid ,DATE_FORMAT(c。POST_DATE, '%d /%米/%Y - >%H:%I')CDATE FROM評論Ç JOIN用戶U ON u.id = c.user_id JOIN( SELECT p.id FROM帖子p ORDER BY p.set_in DESC LIMIT $ offset,$ rec_limit )p ON p.id = c.post_id –

+0

@YardenSade您需要從'posts'表中找到所有需要在子查詢中選擇的列。用'SELECT p。*'替換'SELECT p.id'。如果可行,那麼用你需要的列代替'p。*'。 –

相關問題