(01-07-1394، 10:57 ق.ظ)MehrdadSalahi نوشته: یعنی واقعا راهی نداره با استفاده از یه کوئری؟؟؟
اینطوری به تعداد دسته ها باید کوئری زد. کمی غیر بهینه میشه.
سلام؛ من قبلاً به مسئله ای مثل شما برخورد کردم و این کوئری رو براش نوشتم. البته متأسفانه الان وقت اش رو ندارم براتون توضیح بدهم ولی براتون جداول و کوئری رو گذاشتم. اگه احیاناً مشکل تون حل نشود و یا اینکه ابهامی داشتید بفرمائید در اولین فرصت توضیح می دهم.
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp-test`(IN `_Limitation` INT)
NO SQL
begin
SELECT A.ID as learnID,A.Title AS learnTitle,
B.GroupID AS TutGroupID,B.ID AS TutID,
B.Title AS tutTitle,B.RowNumber
FROM tbgrouplearn AS A
LEFT JOIN
(SELECT @row_num := IF(@prev_value=o.GroupID,@row_num+1,1) AS RowNumber
,o.ID
,o.GroupID
,o.Title
,@prev_value := o.GroupID
FROM tbtutorial o,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY o.GroupID, o.DateUpdate DESC) B
ON A.ID = B.GroupID
WHERE RowNumber>0 And RowNumber<_Limitation;
end$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp-test2`(IN `_Limitation` INT)
NO SQL
begin
SELECT A.ID as learnID,A.Title AS learnTitle,A.GroupID,
B.GroupID AS TutGroupID,B.ID AS TutID,
B.Title AS tutTitle,B.PathPic,B.RowNumber
FROM tbgrouplearn AS A
LEFT JOIN
(SELECT @row_num := IF(@prev_value=o.GroupID,@row_num+1,1) AS RowNumber
,o.ID
,o.GroupID
,o.Title
,o.PathPic
,@prev_value := o.GroupID
FROM tbtutorial o,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY o.GroupID, o.DateUpdate DESC) B
ON A.ID = B.GroupID
WHERE RowNumber>0 And RowNumber<_Limitation;
end$$
DELIMITER ;
-- --------------------------------------------------------
--
-- Table structure for table `tbgrouplearn`
--
CREATE TABLE IF NOT EXISTS `tbgrouplearn` (
`ID` int(11) NOT NULL,
`Title` varchar(255) COLLATE utf8_bin NOT NULL,
`DateUpdate` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='دسته بندی مطالب';
--
-- Dumping data for table `tbgrouplearn`
--
INSERT INTO `tbgrouplearn` (`ID`, `Title`, `DateUpdate`) VALUES
(1, 'tit-1', 1440746677),
(2, 'tit-2', 1440746677),
(3, 'tit-3', 1440746677);
-- --------------------------------------------------------
--
-- Table structure for table `tbtutorial`
--
CREATE TABLE IF NOT EXISTS `tbtutorial` (
`ID` int(11) NOT NULL,
`GroupID` int(11) NOT NULL,
`Title` varchar(255) COLLATE utf8_bin NOT NULL,
`DateUpdate` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='مطالب اصلی سایت';
--
-- Dumping data for table `tbtutorial`
--
INSERT INTO `tbtutorial` (`ID`, `GroupID`, `Title`, `DateUpdate`) VALUES
(3, 1, 'tit1- Matn 1', 1440837718),
(4, 1, 'tit1- Matn 2', 1440837180),
(5, 1, 'tit1- Matn 3', 1440837448),
(6, 3, 'tit3- Matn 1', 1440837861),
(7, 3, 'tit3- Matn 2', 1441007336),
(8, 1, 'tit1- Matn 4', 1440837935),
(26, 2, 'tit2- Matn 1', 1441007090),
(27, 2, 'tit2- Matn 2', 1441007198);
--
-- Indexes for dumped tables
--
--
-- Indexes for table `tbgrouplearn`
--
ALTER TABLE `tbgrouplearn`
ADD PRIMARY KEY (`ID`);
--
-- Indexes for table `tbtutorial`
--
ALTER TABLE `tbtutorial`
ADD PRIMARY KEY (`ID`), ADD KEY `GroupID` (`GroupID`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `tbgrouplearn`
--
ALTER TABLE `tbgrouplearn`
MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT for table `tbtutorial`
--
ALTER TABLE `tbtutorial`
MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=28;