2014-01-28 3 views
2

Я написал запрос с подзапросом, и у обоих из них есть заказ. У меня странное поведение, иногда я не возвращаю все строки, иногда у меня есть 0 строк, но если я запускаю внутренний запрос, у меня всегда есть правильные строки. Есть ли ограничения в подзапросе? MySql является версия 5.5Подзапрос с заказом от

спасибо

SELECT 
* 
FROM 
(
    SELECT 
     @fakeId := @fakeId + 1 AS fakeId, 
     @balance := (@balance + traIn.amount) AS balance, 

    FROM 
     (SELECT @fakeId := 0, @balance := 0) AS vars, 
     table1 traIn 
    INNER JOIN table2 traTypeIn ON traIn._id = traTypeIn.id 
    INNER JOIN table3 ptfIn ON traIn.ptf_id = ptfIn.id 
    LEFT JOIN `user` u ON u.id = traIn.user_create_id 
    LEFT JOIN `user` up ON up.id = traIn.user_update_id 

    WHERE 
    <--- a couple of constraints --> 
    ORDER BY 
     traIn.date 
) AS data 
    ORDER BY data.fakeId DESC 
    LIMIT 50; 
+1

Ничто во внешнем запросе не изменило бы количество строк (за исключением предложения 'limit', конечно). –

ответ

0

Почему вы не на вашем подзапрос, выберите traIn.date, и после этого, выберите только fakeId, баланс Somethings подобное:

SELECT 
data.fakeId, data.balance 
FROM 
(
    SELECT 
     @fakeId := @fakeId + 1 AS fakeId, 
     @balance := (@balance + traIn.amount) AS balance, 
     traIn.date as date1 
    FROM 
     (SELECT @fakeId := 0, @balance := 0) AS vars, 
     table1 traIn 
    INNER JOIN table2 traTypeIn ON traIn._id = traTypeIn.id 
    INNER JOIN table3 ptfIn ON traIn.ptf_id = ptfIn.id 
    LEFT JOIN `user` u ON u.id = traIn.user_create_id 
    LEFT JOIN `user` up ON up.id = traIn.user_update_id 

    WHERE 
    <--- a couple of constraints --> 
) AS data 
    ORDER BY data.date1, data.fakeId DESC 
    LIMIT 50; 
+0

Привет, Джейсон, спасибо за ваш ответ. Мне нужно иметь баланс в строке, который меняет каждую строку, и для правильного вычисления я должен заказать byDate1 в подзапросе – NiBE

+0

Не могли бы вы показать пример того, что у вас есть в каждой строке подзапроса? –

+0

Первая проблема возникает с помощью balace, проверьте это для данных, о которых я говорю: http://stackoverflow.com/questions/21286834/how-to-create-a-partial-balance-row-by-row -in-sql, тогда я исправил его с помощью «fakeID», но когда я пытаюсь с большим количеством данных, а не с немногими в примере, это не сработало. – NiBE

Смежные вопросы