• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در انتخاب ها پس از join کردن
#1
سلام،
کد پی‌اچ‌پی:
$query='SELECT p.id, p.post_title,p.post_short_content,p.post_comment_status,p.post_date,p.post_time,p.post_extra,p.post_author,p.post_continue, GROUP_CONCAT(DISTINCT c.category_name) AS `category`,GROUP_CONCAT(DISTINCT c.category_id) AS `category_id`, GROUP_CONCAT(DISTINCT t.name) AS `tag`, GROUP_CONCAT(DISTINCT t.id) AS `tag_id`,COUNT(`comment`.post_id) as `com` FROM blog_post AS p LEFT JOIN blog_post_category AS c ON c.post_id = p.id LEFT JOIN blog_tag as t ON t.post_id=p.id LEFT JOIN blog_comment AS `comment` ON `comment`.post_id=p.id WHERE(`post_extra`=0 AND c.category_id=\''.RULE.'\') group by p.id ORDER BY p.id DESC LIMIT '.ID*PAGE.','.PAGE

مشکل در بخش category هست که فقط نام اون دسته بندی رو میاره که درون شرط
قرار گرفته در حالی که به غیر از اون ممکنه دسته های دیگه ای هم وجود داشته باشه.

نمیدونم چرا بخش پیوست ارسال مشکل داره!
کد:
CREATE TABLE `blog_category` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `blog_category` (`id`, `name`) VALUES
(1, 'دسته 1'),
(2, 'دسته 2'),
(3, 'عنوان');

CREATE TABLE `blog_post` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `post_title` varchar(255) default NULL,
  `post_short_content` text,
  `post_full_content` text,
  `post_status` tinyint(1) unsigned NOT NULL default '0',
  `post_comment_status` tinyint(1) unsigned NOT NULL default '0',
  `post_author` varchar(40) NOT NULL,
  `post_date` varchar(40) NOT NULL,
  `post_static` tinyint(1) unsigned NOT NULL default '0',
  `post_time` varchar(40) NOT NULL,
  `post_extra` tinyint(1) unsigned NOT NULL default '0',
  `post_continue` tinyint(1) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

INSERT INTO `blog_post` (`id`, `post_title`, `post_short_content`, `post_full_content`, `post_status`, `post_comment_status`, `post_author`, `post_date`, `post_static`, `post_time`, `post_extra`, `post_continue`) VALUES
(10, 'مطلب 1', '<p>متن مطلب 1</p>', '', 1, 1, 'ehsan', '31 / 02 / 1391', 0, '22:30 ب.ظ', 0, 0),
(11, 'مطلب 2', '<p>متن مطلب مطلب 2</p>', '', 1, 1, 'ehsan', '31 / 02 / 1391', 0, '22:30 ب.ظ', 0, 0),
(12, 'مطلب 3', '<p>متن مطلب 3</p>', '', 1, 1, 'ehsan', '31 / 02 / 1391', 0, '22:29 ب.ظ', 0, 0),
(13, 'عنوان مطلب', '<p>عنوان</p>', '', 1, 1, 'ehsan', '31 / 02 / 1391', 0, '22:28 ب.ظ', 0, 0);

CREATE TABLE `blog_post_category` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `post_id` int(11) unsigned NOT NULL,
  `category_id` smallint(5) unsigned NOT NULL,
  `category_name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=30 ;

INSERT INTO `blog_post_category` (`id`, `post_id`, `category_id`, `category_name`) VALUES
(22, 13, 3, 'عنوان'),
(23, 13, 1, 'دسته 1'),
(24, 12, 3, 'عنوان'),
(25, 12, 2, 'دسته 2'),
(26, 12, 1, 'دسته 1'),
(27, 11, 2, 'دسته 2'),
(28, 10, 2, 'دسته 2'),
(29, 10, 1, 'دسته 1');

CREATE TABLE `blog_tag` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `post_id` int(11) unsigned NOT NULL,
  `name` varchar(40) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

INSERT INTO `blog_tag` (`id`, `post_id`, `name`) VALUES
(6, 11, 'مطلب'),
(7, 11, 'دو'),
(8, 10, 'یک');

لطفا راهنماییم کنید. ممنون Heart
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#2
خب شما شرط گذاشتی که فقط این دسته بندی ها بیاد. و میگی فقط این میاد. مشکل چیه؟
  پاسخ
تشکر شده توسط :
#3
کوئری بالا مربوط به نمایش مطالب یک سیستمه با توجه به دسته بندی های اون.

این مطالب میتونن شامل چند دسته بندی باشن یعنی دسته 1، دسته 2 و ...

من این کوئری رو در ادرس زیر اجرا میکنم

27 در واقع همون RULE منه(ثابتی که از ادرس مقدار دهی شده) و ای دی اون دسته بندی که توی صفحات قبلی روش کلیک شده.
حالا میام و میگم انتخاب کن مطالبی رو که توی این دسته بندی قرار دارن.
اما این مطالب همون طور که گفتم ممکنه جزء دسته بندی های دیگه ای هم باشن. از اونجایی که در قسمت نمایش مطالب باید تمام دسته های مربوط به مطلب نمایش داده بشن به مشکل بر میخورم چون فقط یک دسته و اونی که در شرط کوئری قرار گرفته رو نمایش میده.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#4
شما اگر این اطلاعات جدول دسته بندی رو احتیاج داری نمی تونی روش where بزنی اینجوری داری دسته بندیت رو که می خوای نمایش بدی هم فیلتر می کنی. می تونی توی همین کوئری یه بار دیگه با جدول دسته بندی جوین کنی و مثلا اسمش رو بزاری c2 و بعد توی where برای فیلتر دسته بندی از جدول c2 استفاده کنی
  پاسخ
تشکر شده توسط : undefined


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان