2009-08-27 17 views
5

Dobrze podane Mam wartość Chcę sprawdzić potencjalnych meczów w bazie danych (w jednym polu varchar), więc napisać coś takiego:MySQL pytanie o „odwróconej lubi”

SELECT * FROM table WHERE column LIKE "%value%" 

Który będzie działać, jeśli wartość jest coś takiego jak „test” i kolumnie ma wartość „to jest test”, jednak jeśli jest odwrócony wtedy nie będę się mecz próbowałem rzeczy wzdłuż linii:

SELECT * FROM table WHERE CONCAT("%",column,"%") LIKE "value" 

ale don dokładnie wiesz, jak sformułować to w Google, aby uzyskać odpowiedź, której potrzebuję, proszę o pomoc!

+1

Dlaczego chcesz to zrobić? –

+0

wydaje się, że ma zestaw kolumn z czymś podobnym w nazwie kolumny, i chce sprawdzić, czy jego "wartość" zawarta jest w którymkolwiek z tych ... – Irfy

+0

Nie wolno mówić. –

Odpowiedz

11

Można odwrócić instrukcję like. Tylko przy użyciu tej samej składni jako zwykły like zapytania:

select 
    * 
from 
    table 
where 
    'value' like concat('%', column, '%') 

oczywiście, jeśli czułeś dziki i szalony, można również użyć instr:

select * from table where instr('value', column) > 0 

Nie wiem, który z nich jest szybsza , ponieważ nie mam instancji MySQL do przetestowania, ale warto spróbować obu, aby zobaczyć, które wygrane.

+0

+1 dla pierwszej odpowiedzi. To wygląda dobrze. –

+0

bardzo fajnie, nie miałem pojęcia, że ​​to było możliwe! – Irfy

+1

Będzie używać indeksu, jeśli istnieje dla kolumny, do konwersji danych - nie do znalezienia. Szybsze jest używanie widoku wbudowanego w celu dodania tego, co chcesz, do kolumny, a następnie porównania. Jeśli potrzebujesz tylko wierszy, w których występuje słowo, lepiej byłoby użyć INSTR. –

3
SELECT * 
FROM table 
WHERE 'value' LIKE CONCAT('%', column, '%')