2016-03-21 14 views
2

Ben bir tablo var (hesaplar)MySQL regex

 
+---------+------------------------------------+-------------+--------+---------+-------------+--------------------+-------------+-------------+-------------+------------------+---------------------+---------------------+ 
| ID  | Name        | category_id | Active | Balance | Description | UnallocatedAccount | IsTaxLocked | AccountType | HasActivity | DefaultTaxTypeId | Modified   | Created    | 
+---------+------------------------------------+-------------+--------+---------+-------------+--------------------+-------------+-------------+-------------+------------------+---------------------+---------------------+ 
| 6123359 | Accounting Fees     |   4 |  1 | 0.00 |    |     0 |   0 |   1 |   0 |   1509579 | 2016-03-19 15:06:34 | 2016-03-19 15:06:34 | 
| 6123360 | Advertising      |   4 |  1 | 0.00 |    |     0 |   0 |   1 |   0 |   1509579 | 2016-03-19 15:06:34 | 2016-03-19 15:06:34 | 
| 6123357 | Bad Debts Recovered    |   3 |  1 | 0.00 |    |     0 |   0 |   1 |   0 |   1509579 | 2016-03-19 15:06:34 | 2016-03-19 15:06:34 | 

Ve işlemler tablom şu şekilde görünür:

 
+-------+------------+------------+-------------------------------------------------------------+-----------------------------+----------+------------+---------------+---------------------+---------------------+ 
| id | foreign_id | date  | description             | short_description   | amount | balance | function_code | created_at   | updated_at   | 
+-------+------------+------------+-------------------------------------------------------------+-----------------------------+----------+------------+---------------+---------------------+---------------------+ 
| 38322 |   | 2015-12-01 | MONTHLY ACC FEE  HEADOFFICE        |        | -59.50 | -181792.19 | SERM   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38323 |   | 2015-12-01 | TRANSACTION CHARGE HEADOFFICE        |        | -198.75 | -181990.94 | TRNC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38324 |   | 2015-12-01 | CASH DEPOSIT FEE  HEADOFFICE        |        | -2638.01 | -184628.95 | CSHC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38325 |   | 2015-12-01 | OD: LEDGER FEE  HEADOFFICE        |        | -40.00 | -184668.95 | FACF   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38326 |   | 2015-12-01 | DEBIT INTEREST  HEADOFFICE        |        | -2390.35 | -187059.30 | INDR   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38327 |   | 2015-12-01 | STOP ORDER FROM  SETTLEMENT ABSA BANK 123.com   | ABSA BANK 123.com   | 30.00 | -187029.30 | SIC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38328 |   | 2015-12-01 | STOP ORDER FROM  SETTLEMENT ABSA BANK acc8469   | ABSA BANK acc8469   | 29.90 | -186999.40 | SIC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38329 |   | 2015-12-01 | STOP ORDER FROM  SETTLEMENT ABSA BANK 321.co.za   | ABSA BANK loxizea.co.za  | 29.99 | -186969.41 | SIC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38330 |   | 2015-12-01 | STOP ORDER FROM  SETTLEMENT ABSA BANK cceyc    | ABSA BANK cceyc    | 30.00 | -186939.41 | SIC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
| 38331 |   | 2015-12-01 | STOP ORDER FROM  SETTLEMENT ABSA BANK 178444 123  | ABSA BANK 178444 123  | 35.00 | -186904.41 | SIC   | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | 
+-------+------------+------------+-------------------------------------------------------------+-----------------------------+----------+------------+---------------+---------------------+---------------------+ 

Artık işlemleri filtrelerimle nasıl eşleştirebilirim? Her filtre aracılığıyla döngü şöyle:

$filters = \App\Models\Transaction\Filter::All(); 
    $transactions = \App\Models\Transaction::All(); 

    $data = []; 
    foreach($transactions as $transaction) 
    { 
     foreach($filters as $filter) 
     { 
      if(preg_match("/" . $filter->Expression . "/", $transaction->description)) 
      { 
       $data[] = [ 
        'date' => $transaction->date, 
        'ContactName' => $filter->ContactName, 
        'account_id' => $filter->account_id, 
       ]; 
      } 
     } 
    } 

    dd($data); 
+0

transaction_filters işlemlerle 1-N arasındaki bir ilişki ise, işlemler_filters tablonuzda neden işlem kimliği kaydetme neden olmasın? Bize neden regexp'e ihtiyacın olduğunu açıklayabilir misin? Belki de N-N olduğu için mi? – subzeta

+0

İşlemler tablosu 20000'den fazla banka işlemine sahiptir, bu yüzden filtreler, işlemin bir satış, maaş, vb. Olup olmadığını bilmek için tahsisat ile yardımcı olur. İlk yazımda net değildim, onu düzenleyeceğim. – Kyle

cevap

0

Sen JOIN tam dış kullanabilir ve RLIKE böyle: http://sqlfiddle.com/#!9/ba827e/1

Not: ?

İşte
SELECT * FROM transactions_filter f, transactions t 
WHERE t.Description RLIKE f.Expression 

testine SQL Fiddle olduğunu senin Expression içinde mevcut RLIKE ile çalışmayacak, regex geri kalanı iyi çalışıyor.

+0

Geri bildiriminiz için teşekkürler, başka bir işlemle denedim ama işe yaramıyor gibi görünüyor, http://sqlfiddle.com/#!9/ad5535/1 (GODADDY işlemi) – Kyle

+0

@Kyle Since '* 'eşleştirme için kullanılır, bu yüzden tam bir eşlemede kullanmak istiyorsanız kaçmak zorundasınız. Buradaki bilgileri güncelledim: http://sqlfiddle.com/#!9/e7ec0/1 –

+0

Çok teşekkür ederim. iyi çalışıyor. – Kyle