2012-12-31 35 views
2

我肯定有办法从enswitch_mobile_users更好地提取数据,然后我怎么拉它提高我的查询

Enswitch_User_ID,OS_VERSION,PHONE_TYPE

所以,我怎么能提高,提高这查询?

$sql = "SELECT Substring(purchase.`date`,12,8)    AS `Time`, 
        purchase.`item`         AS `Package`, 
        Cast(Substring(purchase.`item`, 12) AS UNSIGNED) AS `Credit`, 
        purchase.`user`         AS `Mobile_User_ID`, 

        (SELECT user_id FROM enswitch_mobile_users WHERE `Mobile_User_ID` = enswitch_mobile_users.`id`) AS `Enswitch_User_ID`, 
        (SELECT os_version FROM enswitch_mobile_users WHERE `Mobile_User_ID` = enswitch_mobile_users.`id`) AS `Os_Version`, 
        (SELECT phone_type FROM enswitch_mobile_users WHERE `Mobile_User_ID` = enswitch_mobile_users.`id`) AS `Phone_Type`, 

        (SELECT enswitch_id FROM enswitch_users WHERE `Enswitch_User_ID` = enswitch_users.`id`) AS `Enswitch_ID` 

         FROM (SELECT item, date, user 
            FROM enswitch_android_purchases 
            UNION 
            SELECT item, date, user 
            FROM enswitch_iphone_purchases) AS `purchase` 
         WHERE Substring(purchase.`date`,1,10) = :date 
       ORDER BY `Time` DESC"; 
+3

看起来你可以使用内部连接 – Sir

+1

查询将需要大量的时间,因为在选择块'select'语句的执行。 – Sahal

+0

我不擅长SQL,这就是为什么我要求学习,是的,我在答案中看到,连接将会更有效率:)谢谢。 – DanR

回答

2

试试这个:

SELECT SUBSTRING(p.date,12,8) AS TIME, p.item AS Package, COUNT(1) AS Sales, 
     CAST(SUBSTRING(p.item, 12) AS UNSIGNED) AS Credit, p.user AS Mobile_User_ID, 
     e.user_id Enswitch_User_ID, e.os_version Os_Version, e.phone_type Phone_Type, 
     eu.enswitch_id Enswitch_ID 
FROM (SELECT item, DATE, USER FROM enswitch_android_purchases 
     UNION 
     SELECT item, DATE, USER FROM enswitch_iphone_purchases) AS p 
LEFT JOIN enswitch_mobile_users e ON p.user = e.id 
LEFT JOIN enswitch_users eu ON e.user_id = eu.id 
WHERE SUBSTRING(p.date,1,10) := DATE 
ORDER BY TIME DESC; 
+0

谢谢。工作很棒:) – DanR