2015-10-10 108 views
0

我試圖建立一種我不知道的論壇。只是玩弄一些代碼。如何從一個表中獲取一個結果,並使用相同的catID從另一個表中獲取一個結果?

現在我有兩張桌子,第一個是論壇類別,第二個是論壇板。

我現在的問題是,我可以使用LEFT JOIN或任何連接從類別表中取出其中的每一個,並從板上使用相同的catID獲取所有結果嗎?

這是我現在沒有工作代碼:

$query = $_database->query(" 
SELECT boards.name AS boardName, boards.info, boards.category, boards.boardID, boards.sort, boards.topics, boards.posts, 
categories.catID, categories.name AS catName, categories.sort 
FROM ".PREFIX."forum_boards AS boards LEFT JOIN ".PREFIX."forum_categories AS categories ON boards.category = categories.catID GROUP BY categories.catID ORDER BY boards.boardID"); 
while ($rad = $query->fetch_array()) { 
    echo '<h2>'.$rad['catName'].'</h2>'; 
    echo $rad['boardName']; 
} 

有一個請求後我的表結構,這是

板:

CREATE TABLE IF NOT EXISTS `mm_forum_boards` (
`boardID` int(11) NOT NULL, 
    `category` int(11) NOT NULL DEFAULT '0', 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `info` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `sort` int(2) NOT NULL DEFAULT '0', 
    `topics` int(11) NOT NULL DEFAULT '0', 
    `posts` int(11) NOT NULL DEFAULT '0' 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

分類:

CREATE TABLE IF NOT EXISTS `mm_forum_categories` (
`catID` int(11) NOT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `info` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `sort` int(11) NOT NULL DEFAULT '0' 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

一些數據:

INSERT INTO mm_forum_categories (`name`, `info`, `sort`) VALUES('Test Cat 1', 'Just giving some lorem data ^^', '1'); 
INSERT INTO mm_forum_categories (`name`, `info`, `sort`) VALUES('Test Cat 2', 'Just giving some lorem data ^^', '2'); 
INSERT INTO mm_forum_boards (`category`, `name`, `info`, sort`) VALUES('3', 'Test board 1', 'Lorem board for now', '1'); 
INSERT INTO mm_forum_boards (`category`, `name`, `info`, sort`) VALUES('3', 'Test board 2', 'Lorem board for now', '2'); 
INSERT INTO mm_forum_boards (`category`, `name`, `info`, sort`) VALUES('3', 'Test board 3', 'Lorem board for now', '3'); 

INSERT INTO mm_forum_boards (`category`, `name`, `info`, sort`) VALUES('4', 'Test board 4', 'Lorem board for now', '1') 
+1

你可以發佈你的表結構和一些測試/採樣數據嗎? – Akshay

+0

我用表結構對我的帖子進行了編輯。 – Tommy

+0

這是什麼意思,你選擇不工作?語法錯誤,沒有結果,錯誤的結果? – Meier

回答

1

SQL中的GROUP BY子句在這裏是錯誤的。它聚集具有相同category_id的所有行。當你想數它們時這很有用,但不在這裏。

當您想按類別命令,把它放在ORDER BY條款

+0

現在刪除它,並改爲設置順序。 但我有貓3中的3板 現在它給了我三個h2標籤以及我只想要一個 – Tommy

+0

SQL總是返回(二維)表與行。 因此,您需要在PHP 中對它們進行聚合,或者對類別使用SQL查詢,然後在循環SQL查詢內部獲取該類別的電路板。 – Meier

+0

所以我需要做兩個查詢? – Tommy

0

按照以下查詢

SELECT 
    mm_forum_categories.name, 
    mm_forum_categories.info, 
    mm_forum_boards.name, 
    mm_forum_boards.info, 
    mm_forum_boards.sort, 
    mm_forum_boards.topics 
FROM 
    mm_forum_categories 
LEFT Join mm_forum_boards 
    ON mm_forum_categories.catID = mm_forum_boards.category 
WHERE 
    mm_forum_categories.catID = '1' 

這一點,我認爲這將解決您的問題。

+0

你能解釋爲什麼這會解決OP問題嗎? – Martin

0

據我瞭解,你需要一個簡單的RIGHT OUTER JOIN英寸看看這個查詢。

SELECT mfc.name AS cat_name, mfc.catID as catID 
FROM mm_forum_categories mfc 
RIGHT OUTER JOIN mm_forum_boards 
ON mfc.catID = mm_forum_boards.category; 
+0

右外部聯接與左外部聯接與交換表的順序相同。通常它會讓事情變得更加困難。 – Meier

相關問題