#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);
Комментариев нет:
Отправить комментарий