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

كيف أصل لاسم الحقل بواسطة ترتيبه في الجدول

مغلق
بدأه أبو محمد اللحياني في 6 نوفمبر 2006 · 6 رد · 951 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي قاعدة بيانات بها عدة جداول ولي اصطلاح فيها وهو أني جعلت الحقل الأساسي PrimaryKey هو أول الحقول فهو يحمل الرقم 0 ويليه الحقل الخاص بالاسم فهو يحمل الرقم 1

مثلاً ففي جدول الملفات الحقل الأول هو fileid والثاني هو filename وهلم جراً لكل الجداول .

وأستخدم الاستعلام عن رقم المادة واسمها من قاعدة البيانات هذه كثيراً وأريد كتابة أمر SELECT واحد أريده أن يعني عن الكتابة لكل جدول

عملت حلاً موقتاً وهو استخدام لغة php ولكنه حل مطول ولست راضي عنه :

$table = 'files';
$fields[$table] = getListFields ($table);

$sql = sprintf ('SELECT %s AS id, %s AS name FROM %s',  
	$fields[$table][0],$fields[$table][1], $table);

ولكني أريد استخدام أوامر mysql فقط لأنها أسرع أفضل من كتابة الأكواد الكثيرة .

فهل هناك ما يختصر لي هذا المشوار الطويل

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

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

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

#2
SELECT userprofile_table.name, userpictures_table.days
FROM userprofile_table
INNER JOIN userpictures_table
ON userprofile_table.user_id=userpictures_table.user_id
WHERE userprofile_table.username='Mohammad';

هل هذا ماتريد؟

هذا يربط بين جدولين عندك في قاعدة البيانات، ويستخرج المعلومات المطلوبة بنائا على هذه الروابط

هنا المزيد عن أمر join

http://dev.mysql.com/doc/refman/5.0/en/join.html

اعذرني فلم افهم سؤالك جيدا، لكن اظن ان هذا ماتسال عنه..

هناك طريقة أخرى سهلة وهي من خلال استخدام MS Access، تقريبا لا يوجد جهاز به طقم Office إلا ويحتوي على Access.. الذي تستطيع فعله هو صنع قاعدة بيانات تشبه للتي عندك، وثم تقوم بصنع query، وبعدها اضغط على الزر في أعلى يسار النافذة لمشاهدة الـSQL command.. و ثم استخدم الأمر هذا مع MySQL وسيعمل فكلاهم يستخدم اوامر SQL.. لكن راجع الأوامر قبل استخدامها مع MySQL حتى تضمن ان كل شيء سيكون كما تريد

إذا نفعتك أحد مشاركاتي فأدع بظهر الغيب لوالداي بالصحة والسلامة والسعادة وطول العمر وأن يكون هذا زيادة لهما في كل خير.

post-21836-1257612765.gif

before asking: smart questions how-to

#3

السلام عليكم

استخدم show index للحصول على جميع المعلومات التى تخص الTable تستطيع من خلالها الحصول على جميع المعلومات ...

راجع الرابط التالي

http://dev.mysql.com/doc/refman/5.0/en/show-index.html

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#4

أخواي eech55 و أحمد غريب أشكركما على مروركما واهتمامكما ولكن ليس هذا ما أريد

أنا لا أريد الربط بين جدولين بل إني أستخدم جدول واحد فقط ثم لا يهمني مسميات الحقول وإنما يهمني ترتيب مواضعها في الجدول .

عندما نفذت الأمر

SHOW INDEX FROM FEEDBACK

Array ( 
	[Table] => FEEDBACK 
	[Non_unique] => 0 
	[Key_name] => PRIMARY 
	[Seq_in_index] => 1 
	[Column_name] => id 
	[Collation] => A 
	[Cardinality] => 0 
	[Sub_part] => [Packed] => 
	[Null] => 
	[Index_type] => BTREE 
	[Comment] =>
 )

وكما تعرف أنا لا يهمني معرفة معلومات عن الجدول وكل ما أريده أن أخزن المفتاح الأساسي في مسمى ID والحقل التالي له في مسمى NAME فقط

فهل أكتب :

SELECT INDEX[0] AS ID, INDEX[1] AS NAME  FROM FEEDBACK
SELECT FIELD[0] AS ID, FIELD[1] AS NAME  FROM FEEDBACK

كل هاتين العبارتين خاطئة ولا أعرف ما هو الصحيح .

ولكني أستعيض عنها بدالة php وجدتها في ملفات المساعدة الخاصة بها :

function getListFields ($table) {
	if (empty($table)) return false;
	global $data;
	$data->execute("SHOW COLUMNS FROM $table");
	if ( $data->num_rows > 0)	{
		while ($data->fetch_row() ) { 
			$resutl[] = $data->row['Field']; 
		}
	}
	$data->free_result();
	return $resutl;
}

ثم أكمل المشوار كما هو موضح في أعلى الموضوع .

ولكن كما قلت لكم هو حل مطول وبدل أن أستخدم عبارة sql واحدة اضطر إلى استخدام عبارتين مع أكواد php أخرى .

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 10 نوفمبر 2006 في 23:48

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

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

#5

السلام عليكم

اخى ابو محمد الذى تحاول القيام به يسمي Subqueries وهذه الخاصية للاسف غير متوفرة فى Mysql لاحظ السؤال التالي

select id from t where name in (select name from g where name = 'Ahmed')

هذه الجملة لا يمكن القيام بها فى mysql وإنما يجب ان نقسمها إلي جملتين ..

لاحظ وجه التشابه بينها وبين سؤالك ..

للحصول على اسماء القوائم يجب عليك ان تضحرها من خلال الامر

SHOW COLUMNS FROM FEEDBACK

وبعد ذلك يجب ان تستخلص منها المحتوي الذي تريد مقارنته.. بنعنى اخر هذه الجملة تعتبر بمثابة جملة الselect الثانية فى المثال السابق التى تستخلص المحتوي name.

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#6

جزاك الله خير

الآن عرفت أنه لا يمكنني القيام بها في عبارة واحدة

كيف أستخلص الحقول من أمر SHOW COLUMNS FROM FEEDBACK

لا بد من استخدام php مثلاً

أنا كنت أريد حل سهل ومختصر ولكن للأستف mysql لم تساعدنا ولعل طريقتي نادرة ولذلك لم يعبهوا بمثلها .

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

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

#7

الاستعلام الثانوي subquery مدعوم في mysql5 واعتقد ان جميع السرفرات يوجد عليها هذه النسخه

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

لم استطع ان انفذ هذه

SELECT COLUMNS FROM (SHOW COLUMNS FROM table_name) limit 1

لكون show لا يعتب استعلام ...لكن يمكن عمل ذلك بوضع دالة تعيد الحقول اوستدعائها ...اقصد في mysql

http://dev.mysql.com/doc/refman/5.0/en/sto...procedures.html

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…