我的平臺:PHP和MySQL:重複輸入的問題 - 需要每個條目顯示只有一次,但他們重複
PHP & MySQL的
我在這裏:
我有4個表格,即'書籍','book_type','book_categories','all_categories'。
我所試圖做的事:
在簡單的話,我想從所有表顯示所有在股票即IN_STOCK =「Y」的書籍,所有的書相關的信息,只有一次不重複條目。目前,每本書都重複出版,我只想向他們展示一次。
當前的問題:
在我的應用程序內的前端,這些條目都一再表明,當在的時候,我希望他們出現一次(如DISTINCT/UNIQUE),而不是重複的事實他們自己。
我的懷疑:
我懷疑是重複數據是因爲每個本本屬於類別。每個書籍條目都顯示多次,因爲它屬於一個類別。混亂?我的意思是,如果book1屬於4個類別,則book1會顯示4次。如果book2屬於2類,則顯示2次。
我需要什麼:
我需要& PHP MySQL代碼,將解決上述問題。我希望我們可以在不使用mySQL中的GROUP_CONCAT的情況下解決問題,因爲同樣的限制(1024?)。一本書可以屬於許多類別,我不想冒着使用GROUP_CONCAT丟失任何數據的風險。我也想在單個查詢中執行此操作,而不必在循環中重複訪問數據庫。感謝您的理解。是
所有的表和相應的數據複製的問題如下:
CREATE TABLE IF NOT EXISTS `books` (
`book_id` int(11) NOT NULL auto_increment,
`book_type_id` int(11) NOT NULL,
`book_title` varchar(50) NOT NULL,
`book_price` smallint(4) NOT NULL,
`in_stock` char(1) NOT NULL,
PRIMARY KEY (`book_id`),
KEY `book_type_id` (`book_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Dumping data for table `books`
--
INSERT INTO `books` (`book_id`, `book_type_id`, `book_title`, `book_price`, `in_stock`) VALUES
(1, 1, 'My Book 1', 10, 'y'),
(2, 1, 'My Book 2', 20, 'n'),
(3, 2, 'My Book 3', 30, 'y'),
(4, 3, 'My Book 4', 40, 'y'),
(5, 2, 'My Book 5', 50, 'n'),
(6, 1, 'My Book 6', 60, 'y'),
(7, 3, 'My Book 7', 70, 'n'),
(8, 2, 'My Book 8', 80, 'n'),
(9, 1, 'My Book 9', 90, 'y'),
(10, 3, 'My Book 10', 100, 'n');
--
-- Table structure for table `book_type`
--
CREATE TABLE IF NOT EXISTS `book_type` (
`book_type_id` int(11) NOT NULL auto_increment,
`book_type` varchar(50) NOT NULL,
PRIMARY KEY (`book_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Dumping data for table `book_type`
--
INSERT INTO `book_type` (`book_type_id`, `book_type`) VALUES
(1, 'Good'),
(2, 'Better'),
(3, 'Best');
--
-- Table structure for table `book_categories`
--
CREATE TABLE IF NOT EXISTS `book_categories` (
`book_id` int(11) NOT NULL,
`cat_id` int(11) NOT NULL,
PRIMARY KEY (`book_id`,`cat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `book_categories`
--
INSERT INTO `book_categories` (`book_id`, `cat_id`) VALUES
(1, 1),
(1, 2),
(1, 3),
(1, 4),
(1, 5),
(2, 1),
(2, 2),
(3, 1),
(3, 2),
(3, 3);
--
-- Table structure for table `all_categories`
--
CREATE TABLE IF NOT EXISTS `all_categories` (
`cat_id` int(11) NOT NULL auto_increment,
`category` varchar(50) NOT NULL,
PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Dumping data for table `all_categories`
--
INSERT INTO `all_categories` (`cat_id`, `category`) VALUES
(1, 'Comedy'),
(2, 'Drama'),
(3, 'Romance'),
(4, 'Horror'),
(5, 'Trivia'),
(6, 'Puzzles'),
(7, 'Riddles'),
(8, 'Kids'),
(9, 'Gents'),
(10, 'Ladies');
我的目標:
//MY QUERY:
SELECT books.book_title, books.book_price,
book_type.book_type,
all_categories.category
FROM books
LEFT JOIN book_type ON books.book_type_id = book_type.book_type_id
LEFT JOIN book_categories ON books.book_id = book_categories.book_id
LEFT JOIN all_categories ON book_categories.cat_id = all_categories.cat_id
WHERE books.in_stock = 'y'
電流輸出:
book_title book_price book_type category
My Book 1 10 Good Comedy
My Book 1 10 Good Drama
My Book 1 10 Good Romance
My Book 1 10 Good Horror
My Book 1 10 Good Trivia
My Book 3 30 Better Comedy
My Book 3 30 Better Drama
My Book 3 30 Better Romance
My Book 4 40 Best NULL
My Book 6 60 Good NULL
My Book 9 90 Good NULL
需要下面的輸出:
book_title book_price book_type category
My Book 1 10 Good Comedy, Drama, Romance, Horror, Trivia
My Book 3 30 Better Comedy, Drama, Romance
My Book 4 40 Best NULL
My Book 6 60 Good NULL
My Book 9 90 Good NULL
感謝所有提前。
請注意我對您的100條查詢語句的編輯。 – MindStalker 2010-01-06 20:14:21
SELECT book.book_id,all_categories.category FROM book_category JOIN all_categories on book_categories.cat_id = all_categories.cat_id JOIN book on books.book_id = book_categories.book_id WHERE books.in_stock ='y'; – MindStalker 2010-01-07 14:22:03
OR SELECT book_categories.book_id,all_categories.category FROM book_category JOIN all_categories on book_categories.cat_id = all_categories.cat_id WHERE book_id IN(SELECT book_id FROM books WHERE books.in_stock ='y'); – MindStalker 2010-01-07 14:22:46