Mysql输入/输出查询

时间:2012-05-18 17:44:49

标签: 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 (
        [...]
    )
)

但是,我想做一个查询,列出输入和输出,我怎么能做到这一点? 如果需要更多解释,请问问我。

编辑1

输入是从第一个查询生成的,从第二个输出生成。

编辑2

查询需要生成财务输入/输出的报告,因此,第一个查询将存储所有输入,第二个查询生成所有输出,两者都来自一个周期。我需要生成一个包含所有输入和输出的列表,按日期排序。

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 个答案:

答案 0 :(得分: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会删除你在这种情况下不会拥有的两套副本。