Selectați rânduri din două tabele diferite, dar ordonate după dată, folosind php și MySQL (Programare, Php, Mysql, Sindicat)

Michael LB a intrebat.
a intrebat.

Am două tabele;

Încerc să produc un extras de cont (ca un extras de cont bancar) care să arate toate cheltuielile și toate plățile. Taxele și plățile trebuie să fie afișate în ordinea datei, pe baza câmpului statement_date.

Sunt destul de sigur că trebuie să folosesc „uniuni”, dar nu reușesc să găsesc o soluție.

Efortul meu de până acum este;

$statement_sql = "(SELECT * FROM accounts_tenant_charge)
UNION
(SELECT * FROM accounts_tenant_payment)
ORDER BY statement_date";

Vă mulțumesc anticipat.

Comentarii

  • Tocmai am adăugat interogarea mea de până acum, mulțumesc. –  > Por Michael LB.
  • ce eroare aveți cu această declarație ? –  > Por xNeyte.
  • Fără poze, mulțumesc. Doar DDL-uri corespunzătoare –  > Por Strawberry.
  • Presupun că tabelele tale arată așa cum ai prezentat. Atunci nu puteți uni două seturi de rezultate cu număr sau tipuri diferite de coloane. –  > Por Werkov.
  • @xNeyte Nu există nicio eroare, doar că nu sunt returnate rânduri. –  > Por Michael LB.
3 răspunsuri
Michael LB

Vă mulțumim pentru ajutor. Următoarea interogare a funcționat pentru mine;

SELECT tenant_charge_date as statement_date, tenant_charge_id as reference, tenant_charge_total_amount as debit, NULL as credit, 'Charge' as type FROM accounts_tenant_charge
UNION ALL
SELECT tenant_payment_date as statement_date, tenant_payment_id as reference, NULL as debit, tenant_payment_amount as credit, 'Payment' as type FROM accounts_tenant_payment
ORDER BY statement_date

4_SATRYA

Trebuie să faceți interogări imbricate. În primul rând, faceți o interogare de uniune bazată pe tabelele dvs. și puneți-o în interogare în interior. Apoi, faceți o interogare SELECT și introduceți-o în exterior. Nu uitați să dați un tabel alias pentru interogarea exterioară.

Puteți încerca acest cod:

SELECT * FROM
(
  (SELECT * FROM accounts_tenant_charge)
   UNION
  (SELECT * FROM accounts_tenant_payment)
) a 
ORDER BY a.statement_date ASC

Comentarii

  • Acest cod nu a funcționat, din păcate. Nu a afișat o eroare, dar nu a afișat nici un rând. –  > Por Michael LB.
  • Vă rugăm să vă asigurați că selecția coloanei dvs. Nu folosiți select * în interogare dacă aveți un număr diferit de coloane.  > Por 4_SATRYA.
Tuncay Göncüoğlu

Tabelele dvs. au un număr diferit de coloane, prin urmare, nu le puteți unifica imediat prin efectuarea unui select * . Trebuie să selectați un număr egal de coloane din ambele tabele. Cum ar fi:

select
  tenant_charge_id as `id`,
  tenant_charge_date as `date`,
  tenant_charge_total_amonunt as `amount`
union
select
  tenant_payment_id,
  tenant_payment_date,
  tenant_payment_amount
order by
  `date` asc