2011-05-25 2 views
2

У меня есть поле invoice_notes в таблице b_orders. В этой области слова «Отклоненная кредитная карта» будут отображаться несколько раз в зависимости от того, сколько раз карта была отклонена. Я пытаюсь написать запрос, чтобы выбрать только записи, в которых фраза «Отклоненная кредитная карта» появляется менее чем в 4 раза?MySQL Query Ocurrences в поле

Что-то вроде этого: SELECT * FROM b_orders где invoice_notes имеет "Кредитные карты Отклонено" < 4 "

Любая помощь приветствуется Спасибо

ответ

0

Как о чем-то вроде:.

SELECT * FROM b_orders 
WHERE invoice_notes LIKE "%Credit Card Declined%" 
    AND invoice_notes NOT LIKE "%Credit Card Declined%Credit Card Declined%Credit Card Declined%Credit Card Declined%" 
1

Это звучит как ответ: http://pisceansheart.wordpress.com/2008/04/15/count-occurrence-of-character-in-a-string-using-mysql/

1. Counting the number of characters in the original string 
2. Temporarily ‘deleting’ the character you want to count and count the string again 
3. Subtract the first count from the second to get the number of occurrences 

    SELECT LENGTH('foobarfoobarfoobar') - LENGTH(REPLACE('foobarfoobarfoobar', 'b', '')) AS occurrences 

Для вашего конкретного примера:

SELECT * FROM b_orders where (length(invoice_notes) - length(replace(invoice_notes, 'Credit Card Declined'))) < (length('Credit Card Declined') * 4) 
0
SELECT * FROM b_orders WHERE invoice_notes LIKE '%Credit Card Declined%' 
AND invoice_notes NOT LIKE REPEAT('%Credit Card Declined%',4); 
+0

Это работало отлично! Большое спасибо за Вашу помощь. – Keith

+0

Добро пожаловать. – Johan

Смежные вопросы