#php #mysql
В базе данных есть 5 строк, с полем description(описание). В каждой из строк в поле
description есть хэштег "#istanbul".
В 1-ой строчке - "#istanbul",
Во 2-ой строчке - "#IstanbulNight",
В 3-ей строчке - "#Istanbul",
В 4-ой строчке - "Hello and #WelcomeToIstanbul",
В 5-ой строчке - "My first travel to #Istanbul",
Мне необходимо вывести все строки, у которых в поле description есть в хэштегэ слово
"istanbul". Одинаковые значение не должны повторяться, например:
Должны выводиться только 1, 2, 4 строка, так как 3 и 5 идентичны 1-ой не учитывая
регистр. Необходимо убрать только те сроки, в которых один единственный хэштег "#istanbul"
Мой код:
$GetQUERY = "#istanbul";
SELECT * FROM `".PREFIX."_photos` WHERE description LIKE'%{$GetQUERY}%' ORDER by
`uploaded_date` ASC
Хотел использовать SELECT DISTINCT. Не помогает. Подскажите как решить данную проблему
P.S. я новичок, строго не судить
Ответы
Ответ 1
Вот так отберутся строки, в которых есть тег, отсутствующий в предыдущих $arr = [ "#istanbul", "#IstanbulNight", "#Istanbul", "Hello and #WelcomeToIstanbul. You are in #istanbul now", "My first travel to #Istanbul",]; // сюда собираем все найденные теги $prev = []; $r = []; foreach($arr as $x) { if(preg_match_all('~#\w+~', $x, $match)) { // если надо не зависеть от регистра $match[0] = array_map('strtolower', $match[0]); // если все уже были, пойдем дальше if( ! ($d = array_diff($match[0], $prev))) { continue; } // добавим новые, обнаруженные в строке array_push($prev, ...$d); } $r[] = $x; } print_r($r); // [ '#istanbul', '#IstanbulNight', 'Hello and #WelcomeToIstanbul. You are in #istanbul now']Ответ 2
$query = "SELECT * FROM `".PREFIX."_photos` WHERE description LIKE'%{$GetQUERY}%' ORDER by `uploaded_date` ASC"; $result = $conn1->query($query); while($row = mysqli_fetch_assoc($result)) { $data[]=$row; } $data=array("0"=>"#IstanbulNight", "1"=>"#Istanbul", "2"=>"Hello and #WelcomeToIstanbul", "3"=>"My first travel to #Istanbul", "4"=>"My first travel to #Istanbul, and #GotoIstanbul", "5"=>"#Istanbul"); foreach ($data as $key => $value) { # code... $pos=strpos($value,"#Ist"); if($pos===false){ $big[]=$value; }else{ $nig[]=$value; } } print_r($nig); $result = array_unique($nig); print_r($result);
Комментариев нет:
Отправить комментарий