2012-05-18 42 views
0

我有两个querys:mysql的输入/输出查询

SELECT LancamentoEntrada.*, 
     TipoEntrada.descricao AS nome, 
     Usuario.nome AS obreiro 
    FROM lancamento_entradas LancamentoEntrada, 
     tipo_entradas TipoEntrada, 
     obreiros Obreiro, 
     usuarios Usuario 
    WHERE LancamentoEntrada.tipo_entrada_id = TipoEntrada.id 
    AND TipoEntrada.somar_caixa = 1 
    AND LancamentoEntrada.obreiro_id = Obreiro.id 
    AND Usuario.id = Obreiro.usuario_id 
    AND LancamentoEntrada.data_entrada >= '{$begin}' 
    AND LancamentoEntrada.data_entrada <= '{$end}' 
ORDER BY LancamentoEntrada.data_entrada 

而且

SELECT LancamentoSaida.*, 
     TipoSaida.descricao AS nome 
    FROM lancamento_saidas LancamentoSaida, 
     tipo_saidas TipoSaida 
    WHERE LancamentoSaida.tipo_saida_id = TipoSaida.id 
    AND TipoSaida.somar_caixa = 1 
    AND LancamentoSaida.data_saida >= '{$begin}' 
    AND LancamentoSaida.data_saida <= '{$end}' 
ORDER BY LancamentoSaida.data_saida 

其中产生后续的数组:

// Query 1 
Array(
    [0] => Array (
     [id] => 3 
     [tipo_entrada_id] => 1 
     [data_entrada] => 2012-05-08 
     [data_vencimento] => 2012-05-08 
     [obreiro_id] => 2 
     [valor_pago] => 20.00 
     [valor_pagar] => 0.01 
     [observacoes] => TESTE 
    ) 

    [1] => Array (
     [...] 
    ) 
) 

// Query 2 
Array (
    [0] => Array (
     [id] => 1 
     [tipo_saida_id] => 1 
     [data_saida] => 2012-05-08 
     [data_vencimento] => 2012-05-08 
     [valor_pago] => 200.00 
     [observacoes] => tESTE 
    ) 
    [1] => Array (
     [...] 
    ) 
) 

但是,我想要做一个查询,列出投入和产出,我如何能够实现这一目标? 如果需要更多的解释,请问我。

EDIT 1

输入是从第一查询,从第二输出端产生。

编辑2

的querys需要生成金融输入/输出的报告,因此,第一个查询获取存储所有输入和所述第二获取生成的所有输出,从一个周期都betwenn。我需要生成一个包含全部,输入和输出的列表,按日期排序。

Edit 3 

我已经做了这个查询,问题是,我怎么知道什么时候输入和何时输出?

试过ISNULLCASEs,但没有工作。

(SELECT LancamentoEntrada.data_entrada AS data, 
    LancamentoEntrada.data_vencimento AS vencimento, 
    LancamentoEntrada.valor_pago AS valor, 
    LancamentoEntrada.observacoes AS observacoes, 
    TipoEntrada.descricao AS nome 
    FROM lancamento_entradas LancamentoEntrada, 
    tipo_entradas TipoEntrada 
    WHERE LancamentoEntrada.tipo_entrada_id = TipoEntrada.id 
    AND TipoEntrada.somar_caixa = 1 
) 

UNION 

(SELECT LancamentoSaida.data_saida AS data, 
    LancamentoSaida.data_vencimento AS vencimento, 
    LancamentoSaida.valor_pago AS valor, 
    LancamentoSaida.observacoes AS observacoes, 
    TipoSaida.descricao AS nome 
    FROM lancamento_saidas LancamentoSaida, 
    tipo_saidas TipoSaida 
    WHERE LancamentoSaida.tipo_saida_id = TipoSaida.id 
    AND TipoSaida.somar_caixa = 1 
) 
+1

你试过工会吗? http://www.mysqltutorial.org/sql-union-mysql.aspx – sree

+0

当你说*“列出输入和输出”*时,你究竟是什么意思? – MilkyWayJoe

+0

@MilkyWayJoe使用第一个查询的结构将第一个查询的结果混合到第二个查询的结果。 –

回答

1

如果仍然唯一需要的是确定哪些记录来自哪个查询,你只需要一个文字添加到每个查询。

(SELECT 
     'Input' as rec_type, 

    LancamentoEntrada.data_entrada AS data, 
    LancamentoEntrada.data_vencimento AS vencimento, 
    LancamentoEntrada.valor_pago AS valor, 
    LancamentoEntrada.observacoes AS observacoes, 
    TipoEntrada.descricao AS nome 
    FROM lancamento_entradas LancamentoEntrada, 
    tipo_entradas TipoEntrada 
    WHERE LancamentoEntrada.tipo_entrada_id = TipoEntrada.id 
    AND TipoEntrada.somar_caixa = 1 
) 

UNION ALL 

(SELECT 
     'Output' as rec_type, 

     LancamentoSaida.data_saida AS data, 
    LancamentoSaida.data_vencimento AS vencimento, 
    LancamentoSaida.valor_pago AS valor, 
    LancamentoSaida.observacoes AS observacoes, 
    TipoSaida.descricao AS nome 
    FROM lancamento_saidas LancamentoSaida, 
    tipo_saidas TipoSaida 
    WHERE LancamentoSaida.tipo_saida_id = TipoSaida.id 
    AND TipoSaida.somar_caixa = 1 
) 

顺便说一句,你会得到更好的性能,如果你UNION ALL由于UNION会从中你会不会在这种情况下,有两套删除重复。

+0

感谢您的回答,我会尽力明天=) –

+0

康拉德工作得很好,我怎么能通过数据订购? –

+0

用'ORDER BY data'解决'UNION ALL'之外,谢谢! –