تبديل صف في أعمدة مع MySQL دون استخدام النقابات؟
سؤال
لدي جدول مشابه لما يلي أدناه:
id | cat | one_above | top_level |
0 'printers' 'hardware' 'computers'
أريد أن أكون قادرا على كتابة استفسار، دون استخدام النقابات, ، سيعودني إلى مجموعة النتائج التي تنقل أعمدة هذا الجدول إلى صفوف. ماذا يعني هذا، هو أنني أريد أن تكون النتيجة:
id | cat |
0 'printers'
0 'hardware'
0 'computers'
هل هذا ممكن في mysql؟ لا أستطيع الدخول إلى طبقة التطبيق وأداء هذا لأنني أطعم هذه في محرك بحث سوف فهرس استنادا إلى المعرف. مختلف DBMS الأخرى لديها شيء مثل pivot و unpivot. سأكون ممتنا لأي نظرة ثاقبة لشيء أفتقده.
محمود
ملاحظة
أنا أفكر في إعادة تطبيع قاعدة البيانات كخيار أخير، لأن هذا لن يكون مهمة تافهة.
شكرا!
المحلول
حصلت على هذا من الكتاب فن SQL, الصفحات 284-286:
دعنا نقول اسم الجدول الخاص بك هو foo
.
أولا، قم بإنشاء جدول يسمى pivot
:
CREATE Table pivot (
count int
);
إدراج في تلك الجداول حيث توجد العديد من الصفوف كأعمدة تريد محورها foo
. وبعد لأن لديك ثلاثة أعمدة في foo
أنك تريد المحور، وخلق ثلاثة صفوف في جدول المحور:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
الآن القيام بالانضمام الديكارتيون بين foo
و pivot
, باستخدام أ CASE
لتحديد العمود الصحيح بناء على العدد:
SELECT foo.id, Case pivot.count
When 1 Then cat
When 2 Then one_above
When 3 Then top_level
End Case
FROM foo JOIN pivot;
هذا يجب أن يمنحك ما تريد.
نصائح أخرى
بعد بعض حفر واسعة إلى حد ما تعثرت هذه الصفحة التي قد تحتوي أو لا تحتوي على إجابتك. من الصعب في MySQL ولكن من وجهة نظر مفاهيمية، يمكنني إنشاء استعلام من شأنه أن يتبنى مثل هذا باستخدام وصف (على الرغم من أنه من المحتمل أن يؤدي ذلك بشكل فظيع). لذلك أنا متأكد من أنه يمكننا معرفة طريقة للقيام بذلك بالطريقة الصحيحة.