MySQL "مع استعلام" الترجمة
سؤال
خلفية:
لدي هذا "مع استعلام" الترجمة "المعرفة في MySQL:
SELECT
case TRIM(company)
when 'apple' THEN 'AAPL'
when 'microsoft' THEN 'MSFT'
else '__xx__'
END as company
,case TRIM(division)
when 'hardware' THEN Trim(division)
when 'software' THEN Trim(division)
else '__xx__'
END as division
,concat( '$' , format(sum(trydollar),0)) as dollars
FROM pivtest
GROUP BY
company, division with rollup
ويولد هذا الإخراج:
AAPL;hardware;$279,296 AAPL;software;$293,620 AAPL;__xx__;$572,916 MSFT;hardware;$306,045 MSFT;software;$308,097 MSFT;__xx__;$614,142 __xx__;__xx__;$1,187,058
إذا كنت قد استخدمت استعلامات "مع الترجمة" في MySQL من قبل، فيمكنك أن تستغل بنية الجدول المصدر الخاص بي.
سؤال:
بالنظر إلى هذا الناتج الخام من MySQL، ما هي أسهل طريقة للحصول على هيكل "شجرة" مثل ما يلي؟
AAPL
hardware;$279,296
software;$293,620
Total; $572,916
MSFT
hardware;$306,045
software;$308,097
Total;$614,142
Total
$1,187,058
المحلول
أسهل هو القيام بذلك في أي برنامج العميل الذي تستخدمه لتلقي وإظهار إخراج المستخدم MySQL - بالتأكيد ليس أسهل لتنفيذ وظائف طبقة العرض التقديمي في طبقة البيانات! - أخبرنا اللغة & C في برنامج العميل الخاص بك وقد نتمكن من المساعدة ...
تحرير: إعطاء حل بايتون بايتون بسيطة في طلب Asker الأصلي.
مع Python's DB API، يمكن أن ينظر إلى النتائج من استعلام DB ببساطة كقائمة من tuples. إذن إليك وظيفة لتنسيق تلك النتائج كما هو مطلوب:
def formout(results):
marker = dict(__xx__=' Total')
current_stock = None
for stock, kind, cash in results:
if stock != current_stock:
print marker.get(stock, stock).strip()
current_stock = stock
if kind in marker and stock in marker:
kind = ' '*8
print ' %s;%s' % (marker.get(kind, kind), cash)
marker
هو القاموس لتعيين علامة خاصة '__xx__'
في السلسلة المرغوبة في الإخراج (أنا طابقي الحشد بشكل مناسب عن المجاميع "المتوسطة"، لذلك عندما أطبع "الكلي الكلي" النهائي، أنا .strip()
تلك الفراغات قبالة). أنا أيضا استخدامها للتحقق من الحالة الخاصة التي يكون فيها كل من الأعمدة الأولىين العلامة (لأنه في هذه الحالة يحتاج العمود الثاني إلى تحويل إلى مسافات بدلا من ذلك). لا تتردد في طرحه في تعليقات لأي توضيح إضافي لأعابير بيثون واستخدام قد يكون ضروريا!
إليك الناتج الذي أراه عند استدعاء هذه الوظيفة مع البيانات المرفقة (تحولت إلى قائمة من 7 مكيفات من 3 سلاسل لكل منها):
AAPL
hardware;$279,296
software;$293,620
Total;$572,916
MSFT
hardware;$306,045
software;$308,097
Total;$614,142
Total
;$1,187,058
لا تكون محاذاة الفضاء متطابقة لذلك أرى في السؤال (وهو أمر غير متسابق قليلا من حيث عدد المساحات التي من المفترض أن تكون فيها العديد من المساحات) ولكن آمل أن تكون قريبا بما يكفي لما تريد أن تجعله من السهل عليك ضبطه هذا لاحتياجاتك الدقيقة (كما تواجهك لترجمة ثعبان إلى PHP على أي حال، يجب أن يكون تعديل المساحة أقل منهما).