2017-01-16 3 views
-2

Пожалуйста, помогите мне я новичок:ВЫБРАТЬ из таблицы, где Column содержит либо

Я хочу, чтобы выбрать данные из SQL столбца, скажем, image_description, который содержит данные в виде тегов. например, один вход в колонку «Москва, огни, вода, Россия, ночь». Другие записи таблицы в этом столбце содержат данные в аналогичном формате.

Я хочу использовать ключевые слова, чтобы выбрать данные и поместить их в константу say $ tag. Таким образом, переменная $ tag может содержать в одной точке e'g «Москва, свет, вода, Россия, ночь» сверху.

Как я могу сформулировать инструкцию SELECT для извлечения любой строки, содержащей любое слово в переменной $ tag.

+0

простой запрос на выборку может привести к собственно данных ...... выбрать * из table_name где column_name как '% your_string%'; –

+0

Как сказал юрген, [нормализовать] (http://stackoverflow.com/questions/246701/what-is-normalisation-or-normalization) ваши вкладки. Я настоятельно рекомендую создать другую таблицу, в которой вы можете хранить отдельные теги, принадлежащие изображению. В таблицу будут включены «image_id» и «tag». Если у изображения есть несколько тегов, в этой таблице будет несколько записей, по одному для каждого тега. – Cashbee

ответ

0

Это должно сделать трюк:

SELECT * FROM your_table WHERE image_description LIKE 'your_tag%';

Или, если вы хотите проверить, для нескольких тегов, просто добавьте OR условия, например: SELECT * FROM your_table WHERE image_description LIKE 'your_tag%' OR image_description LIKE 'your_second_tag% OR image_description LIKE 'your_third_tag%;

Проверить this вопрос вне;

+0

Работает только тогда, когда переменная содержит только одно слово –

+0

@KaiLean Отредактировано. Просто используйте оператор '' 'for''', чтобы добавить условия' '' OR''' к вашему запросуString –

1

Не очень хорошая идея использовать Mulitple значения в одном столбце, если соответствие всем теге .. но если вы используете один и тот же путь, попробовать что-то вроде этого

$string1= yoursting_var.","; 
$string2= ", ".yoursting_var.","; 
$string3=", ".yourstring_var; 
select * from table_name where (column_name like '$string1%' || column_name like '%$string2%' || column_name like '%$string3');.. 

если вы используете простой как% строки %, это создаст проблему при сравнении некоторых слов, которые бывают иными словами. например, «вода» и «съедать», если вы будете искать «ели», она вернет оба.

// для Mulitple слов

$words_arr; // this is your words array contain any nummber of words 

$com_string=""; 

foreach($words_arr as $words){ 
    $string1= $words.","; 

    $string2= ", ".$words.","; 

    $string3=", ".$words; 

//make query using loop for all words with AND/OR condition  
    $com_string .= " AND (column_name like '$string1%' || column_name like '%$string2%' ||column_name like '%$string3')"; 

} 

select * from table_name where 1 $com_string; 
+0

Спасибо Tariq..Что, если я не знаю количества слов в переменной. Подобно тому, как вы использовали 3 слова в своем примере. Он генерируется системой, поэтому количество слов может меняться ... иногда «word1, word2, word3» или иногда «слово 1, слово 3» или даже «слово 1, слово3, слово7, слово 4» и т. Д. –

+0

будет проще если и изменить структуру таблицы .., но в этом случае вам нужен какой-то трюк $ words_arr; // это ваш массив слов содержит любое числовое число слов $ com_string = ""; foreach ($ words_arr as $ words) { $ string1 = $ words. ","; $ string2 = ",". $ Words. ","; $ string3 = ",". $ Words; // сделать запрос с использованием цикла для всех слов с условием И/ИЛИ $ com_string.= "AND (column_name like '$ string1%' || column_name как '% $ string2%' || column_name как '% $ string3')"; } select * from table_name где 1 $ com_string; – Tariq

+0

@KaiLean просто добавляет их в строку запроса; что-то в строках '' 'queryString = 'SELECT * from blabla ... WHERE condition1; queryString + = 'OR condition2;'; '' ' –

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