الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أستخدم Join للربط بين عدة جداول

مغلق
بدأه أبو محمد اللحياني في 22 أغسطس 2007 · 3 رد · 1,312 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

بسم الله الرحمن الرحيم

لدي الجداول التالية

articles لتخرين المقالات

subtype, لتحديد نوع المادة كمقال ، خطبة، .............

users, لتخزين الأعضاء

topics لتخزين التصنيفات

//--------------------------------------------------------------------

يتضمن الجدول articles الحقول التالية التي تربط بينه وبين الجداول الثلاث الأخرى

الحقل userid وهو نفسه الحقل الأساس في الجدول users

الحقل topicid وهو نفسه الحقل الأساس في جدول topics

الحقل subtype_id وهو نفسه الحقل الأساس في جدول subtype_id

//--------------------------------------------------------------------

والآن أريد إنشاء استعلام ليحتوي الحقول التالية

id من الحقل artid في الجدول articles

title من الحقل subject في الجدول articles

description من الحقل memo في الجدول articles

pubDate من الحقل jdate في الجدول articles

lastBuildDate من الحقل modified في الجدول articles

source من الحقل source في الجدول articles

category من الحقل topicname في الجدول topics

author من الحقل username في الجدول users

subtype من الحقل subtype في الجدول subtypes

ثم جربت الإستعلام التالي

SELECT 
	artid AS id, 
	subject AS title, 
	memo AS description, 
	articles.jdate AS pubDate, 
	modified AS lastBuildDate
FROM articles, 
	topics   LEFT  JOIN topicname AS category ON articles.topicid=topics.topicid, 
	subtypes LEFT  JOIN subtype   ON articles.subtype_id=subtypes.subtype_id, 
	users	LEFT  JOIN realname AS author  ON articles.userid=users.userid

فيعطينا خطأ

#1146 - Table 'main.topicname' doesn't exist

فما هو الحل وجزاكم الله خيراً

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 22 أغسطس 2007 في 15:54

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#2

لعل الجميع لم يجب على السؤال إما لتفاهته والله المستعان ، أو لأن هذه الجداول غير متوفر عندهم

حسناً سأعطيكم كود تلك الجداول، لعل أحدكم يجب على سؤالي

-- Table structure for table `articles`
-- 

CREATE TABLE `articles` (
  `artid` int(10) NOT NULL auto_increment,
  `subject` varchar(50) collate cp1256_bin NOT NULL default '',
  `summary` varchar(200) collate cp1256_bin NOT NULL default '',
  `memo` longtext collate cp1256_bin NOT NULL,
  `userid` int(11) NOT NULL default '0',
  `subtype_id` smallint(2) NOT NULL default '1',
  `topicid` int(6) NOT NULL default '0',
  `jdate` date NOT NULL default '0000-00-00',
  `hdate` date NOT NULL default '0000-00-00',
  `source` varchar(100) collate cp1256_bin default 'none',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`artid`),
  FULLTEXT KEY `summary` (`summary`),
  FULLTEXT KEY `memo` (`memo`),
  FULLTEXT KEY `subject` (`subject`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1256 COLLATE=cp1256_bin AUTO_INCREMENT=1;

-- --------------------------------------------------------

-- 
-- Table structure for table `subtypes`
-- 

CREATE TABLE `subtypes` (
  `subtype_id` tinyint(2) NOT NULL auto_increment,
  `subtype` varchar(30) collate cp1256_bin NOT NULL default '',
  `imgid` smallint(3) NOT NULL default '0',
  PRIMARY KEY  (`subtype_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1256 COLLATE=cp1256_bin AUTO_INCREMENT=1;

-- --------------------------------------------------------

-- 
-- Table structure for table `topics`
-- 

CREATE TABLE `topics` (
  `topicid` int(6) NOT NULL auto_increment,
  `topicname` varchar(80) collate cp1256_bin NOT NULL default '',
  `topicparent` int(11) NOT NULL default '0',
  `infoid` int(10) NOT NULL default '0',
  PRIMARY KEY  (`topicid`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1256 COLLATE=cp1256_bin AUTO_INCREMENT=1;

-- --------------------------------------------------------

-- 
-- Table structure for table `users`
-- 

CREATE TABLE `users` (
  `userid` int(11) NOT NULL auto_increment,
  `username` varchar(100) collate cp1256_bin NOT NULL default '',
  `password` varchar(50) collate cp1256_bin NOT NULL default '',
  `realname` varchar(80) collate cp1256_bin NOT NULL default '',
  `attribute` varchar(30) collate cp1256_bin NOT NULL default '',
  `email` varchar(50) collate cp1256_bin NOT NULL default '',
  `language` char(2) collate cp1256_bin NOT NULL default 'ar',
  `groupid` smallint(2) NOT NULL default '1',
  `jdate` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`userid`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `realname` (`realname`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1256 COLLATE=cp1256_bin AUTO_INCREMENT=1;

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#3

الحمد لله أولاً وآخراً لقد وجدت الحل

SELECT 
	articles.artid AS id, 
	articles.subject AS title, 
	articles.memo AS description, 
	articles.jdate AS pubDate, 
	articles.modified AS lastBuildDate,
	users.realname AS author,
	topics.topicname AS category,
	subtypes.subtype
FROM articles
	LEFT  JOIN topics ON articles.topicid=topics.topicid
	LEFT  JOIN subtypes ON articles.subtype_id=subtypes.subtype_id
	LEFT  JOIN users ON articles.userid=users.userid

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

هذا الموضوع مغلق.

مواضيع مشابهة