Intereting Posts

Как создать основную книгу / учетную запись с помощью PHP Mysql

Я пытаюсь создать систему бухгалтерского учета с двойной регистрацией. Я завершил разработку базы данных для этого, пожалуйста, просмотрите эту ссылку, чтобы увидеть диаграмму моей базы данных. http://i39.tinypic.com/juhbv6.png

Я много пробовал разработать mysql-запрос для создания главной книги, но я не получил близко. Все, что мне удалось сделать, это создать регистр только для одной учетной записи, где мне нужно создать неограниченную учетную запись.

Я попробовал следующий запрос:

$this->db->select('*'); $this->db->from('credit_side'); $this->db->join('debit_side', ' debit_side.transaction_id_dr = credit_side.transaction_id_cr '); $this->db->join('transaction_info', 'transaction_info.transaction_id = credit_side.transaction_id_cr '); $this->db->join('accounts', 'accounts.code = credit_side.account_code '); $this->db->where('debit_side.account_code', '1001'); $this->db->order_by('voucher_date','ASC'); 

После того, как вы не смогли написать запрос mysql, который может создать регистр для всех учетных записей, я записал логику создания учетной записи General Ledger / T.

Теперь, пожалуйста, помогите мне с запросом mysql?

Пожалуйста, проверьте базу данных, прежде чем переходить к следующему. Заранее спасибо 🙂

  1. Получите accounts.name AS AccountHead, accounts.code из учетных записей.

  2. Перейдите в таблицу debit_side и get debit_side.account_code , если debit_side.account_code = accounts.code затем получите credit_side.account_code AS AccountName1 (но когда я буду эхо в php, я хочу получить имя вместо самого кода) и credit_side.amount AS Amount1, SUM(credit_side.amount) AS TotalAmount1 из credit_side где debit_side.transaction_id_dr = credit_side.transaction_id_cr и transaction_info.voucher_date находится между датой и датой2 WHERE transaction_info.transaction_id = debit_side.transaction_id_dr

  3. После завершения второго шага перейдите к таблице credit_side и get credit_side.account_code ,
    if credit_side.account_code = accounts.code тогда получите debit_side.account_code AS AccountName2 (но когда я буду эхо в php, я хочу получить имя вместо самого кода) и debit_side.amount AS Amount2, SUM(debit_side.amount) AS TotalAmount2 из debit_side где credit_side.transaction_id_cr = debit_side.transaction_id_dr и transaction_info.voucher_date находится между датой1 и датой2 WHERE transaction_info.transaction_id = credit_side.transaction_id_cr

Теперь в файле вида я хочу иметь следующее:

  <table width="200" border="0"> <tr><td colspan="5">Account Head <?echo $AccountHead ; ?> </td> </tr> <tr> <td>Dr.</td> <td>amount.</td> <td>&nbsp;</td> <td>Cr</td> <td>Amount</td> </tr> <tr> <td><?echo $AccountName1 ; ?></td> <td><?echo $Ammount1 ; ?></td> <td></td> <td><?echo $AccountName2 ; ?></td> <td><?echo $Ammount2 ; ?></td> </tr> <tr> <td>Total</td> <td><?echo $TotalAmount1 ; ?></td> <td>&nbsp;</td> <td>Total </td> <td><?echo $TotalAmount2 ; ?></td> </tr> </table> 

Пример основной книги

введите описание изображения здесь

 public function getDebits(){ $data = array( 'debit_side.account_code DebitCode', 'group_concat(distinct accounts.name) as DebitAccount', 'group_concat(debit_side.amount) as DebitAmount', 'group_concat(transaction_info.voucher_date) as DebitVoucherDate' ); $this->db->select($data); $this->db->from('accounts'); $this->db->join('credit_side','accounts.code = credit_side.account_code','left'); $this->db->join('debit_side','debit_side.transaction_id_dr = credit_side.transaction_id_cr','left'); $this->db->join('transaction_info','transaction_info.transaction_id = credit_side.transaction_id_cr','left'); $this->db->group_by('debit_side.account_code'); $this->db->order_by('debit_side.account_code','ASC'); $query = $this->db->get(); return $query->result_array(); } public function getCredits() { $data = array( 'credit_side.account_code CreditCode', 'group_concat(distinct accounts.name) as CreditAccount', 'group_concat(credit_side.amount) as CreditAmount', 'group_concat(transaction_info.voucher_date) as CreditVoucherDate' ); $this->db->select($data); $this->db->from('accounts'); $this->db->join('debit_side','accounts.code = debit_side.account_code','left'); $this->db->join('credit_side','debit_side.transaction_id_dr = credit_side.transaction_id_cr','left'); $this->db->join('transaction_info','transaction_info.transaction_id = credit_side.transaction_id_cr','left'); $this->db->group_by('credit_side.account_code'); $this->db->order_by('credit_side.account_code','ASC'); $query = $this->db->get(); return $query->result_array(); } 

Извините за поздний ответ, но это идеальная вещь, которую вы хотите проверить, прежде чем что-либо делать. я хотел создать файл представления для этого, но, похоже, он сложный и занимает больше времени, которое на данный момент я озер

РЕДАКТИРОВАНИЕ

Это решение может помешать вам просматривать, поскольку я тестировал его. Как бы я ни пытался объединить эти два запроса и преуспеть. Запрос может выглядеть как нечто сложное, но оно дает идеальные результаты. Вот

 $data = array( 'debit_side.account_code Code', 'group_concat(distinct accounts.name) as DebitAccount', 'group_concat(debit_side.amount) as DebitAmount', 'group_concat(transaction_info.voucher_date) as DebitVoucherDate', '(SELECT group_concat(distinct accounts.name) as CreditAccount FROM (accounts) left JOIN debit_side ON accounts.code = debit_side.account_code left JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr left JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr group by credit_side.account_code having credit_side.account_code = `Code`) as CreditAccount', '(SELECT group_concat(credit_side.amount) as CreditAmount FROM (accounts) left JOIN debit_side ON accounts.code = debit_side.account_code left JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr left JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr group by credit_side.account_code having credit_side.account_code = `Code`) as CreditAmount', '(SELECT group_concat(transaction_info.voucher_date) as CreditVoucherDate FROM (accounts) left JOIN debit_side ON accounts.code = debit_side.account_code left JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr left JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr group by credit_side.account_code having credit_side.account_code = `Code`) as CreditVoucherDate' ); $this->db->select($data); $this->db->from('accounts'); $this->db->join('credit_side','accounts.code = credit_side.account_code','left'); $this->db->join('debit_side','debit_side.transaction_id_dr = credit_side.transaction_id_cr','left'); $this->db->join('transaction_info','transaction_info.transaction_id = credit_side.transaction_id_cr','left'); $this->db->group_by('debit_side.account_code'); $this->db->order_by('debit_side.account_code','ASC'); $query = $this->db->get(); return $query->result_array(); 

Хотя этот запрос работает нормально, но вот модифицированная и оптимизированная версия этого запроса, я действительно изучил вещи из этого запроса, вы также должны взглянуть на это

Странное поведение группы по запросу, которое необходимо оптимизировать