كيف يمكنني التقدم بطلب وظيفة الرياضي إلى MySQL query ؟

StackOverflow https://stackoverflow.com/questions/153825

  •  03-07-2019
  •  | 
  •  

سؤال

لدي الاستعلام التالي لتحديد عدد الأصوات قصة تلقت:

SELECT s_id, s_title, s_time, (s_time-now()) AS s_timediff, 

(
 (SELECT COUNT(*) FROM s_ups WHERE stories.q_id=s_ups.s_id) -
 (SELECT COUNT(*) FROM s_downs WHERE stories.s_id=s_downs.s_id)
) AS votes

FROM stories

أود أن تطبيق الرياضية التالية الدالة عليه القادمة القصص (أعتقد أنه ما رديت يستخدم) - http://redflavor.com/reddit.cf.algorithm.png

أنا يمكن أن تؤدي وظيفة على الجانب التطبيقي (الذي أقوم به الآن) ولكن لا أستطيع فرز الترتيب الذي توفر وظيفة.

أي المشورة ؟

هل كانت مفيدة؟

المحلول

جرب هذا:

    SELECT s_id, s_title, log10(Z) + (Y * s_timediff)/45000 AS redditfunction 
    FROM (
    SELECT stories.s_id, stories.s_title, stories.s_time, 
    stories.s_time - now() AS s_timediff, 
    count(s_ups.s_id) - count(s_downs.s_id) as X, 
    if(X>0,1,if(x<0,-1,0)) as Y, 
    if(abs(x)>=1,abs(x),1) as Z
    FROM stories 
    LEFT JOIN s_ups ON stories.q_id=s_ups.s_id
    LEFT JOIN s_downs ON stories.s_id=s_downs.s_id
    GROUP BY stories.s_id
    ) as derived_table1

قد تحتاج إلى التحقق من هذا البيان ما اذا كان يعمل مع مجموعات البيانات الخاصة بك.

نصائح أخرى

y و z هي صعبة تلك.تريد عودة محددة على أساس x قيمة.هذا يبدو وكأنه سبب وجيه لجعل وظيفة.

http://dev.mysql.com/doc/refman/5.0/en/if-statement.html

يجب عليك ان تجعل 1 وظيفة y واحد z.تمر في x, ونتوقع عددا من الخلف.

DELIMINATOR //

CREATE FUNCTION y_element(x INT) 
  RETURNS INT

BEGIN
    DECLARE y INT;

IF x > 0 SET y =  1;
ELSEIF x = 0 SET y =  0;
ELSEIF x < 0 SET y = -1;
END IF;

RETURN y;

END //;

DELIMINATOR;

هناك y.أنا فعلت هذا من جهة دون التحقق لذلك قد تضطر إلى إصلاح بعض الخطأ المطبعي.لا z بنفس الطريقة ثم لديك كل من قيم النهائي الخاص بك وظيفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top