Вкарване в array и изкарване на всичко чрез заявка

dunix

Registered
Здравейте,
Като първо не успях да измисля много точно заглавие на това, което искам и се извинявам.

Имам таблица с интереси в базата данни. Всеки интерес е с негово ID. Искам да направя търсачка в която като въведа няколко вида интереси да ми ги изкарва.

Пример:
в таблицата имам: футбол, музика, филми и компютърни игри
в търсачката пиша: футбол, музика, волейбол ( разделям ги чрез запетая) и ми показва тези, които ги има в таблицата (футбол и музика), а тези, които ги няма (в случая волейбол) ми дава съобщение, че липсва.


Надявам се да сте ме разбрали какво точно искам да направя.
 
Псевдо код:
PHP:
for every search item
    $result = select * from interests where name = search_item
    if $result_count > 0 
        print results
    else
       echo "no results!"
 
Ползвам функция, която ми обръща input-а в array и като напиша в него "ден, година" ми излиза по този начин

PHP:
array(2) { [0]=> string(6) "ден" [1]=> string(13) " година" }

PHP:
$intArr = arrayInt($arrayInteresiInput);
$result = $db->query("SELECT * FROM `interesi` WHERE `titleName` LIKE '%" . $intArr . "%'");

if ($result->num_rows > 0) { 
	while ($row = $result->fetch_array()) {
		$storeArray[] =  $row;  
	}
	foreach ($storeArray as $row) {
		echo $row['titleName'];
	}
} else {
		echo "No result";
}

Като въведа "ден, година" ми изкарва "no result", само като въведа "ден" или "година" получавам резултат.
Също така искам да попитам как да стане като въведа част от думата да ми показва всички имена съдържащи тази част, независимо дали съм въвел една, две или колкото и да са части от дума.
 
Виж поста ми по-горе, направи го така.
Относно втория ти въпрос:

Също така искам да попитам как да стане като въведа част от думата да ми показва всички имена съдържащи тази част, независимо дали съм въвел една, две или колкото и да са части от дума.
Използвай

[sql]WHERE field LIKE '%serch_term%"[/sql]
 
anonimen каза:
Виж поста ми по-горе, направи го така.
Относно втория ти въпрос:

Не съм много наясно с функцията for. Четох за нея в php и пак нещо не ми е ясно как да я напиша. Няправих няколко неуспешни опита с for и след 3 часа мотане го я направих с foreach.
 
dunix каза:
Не съм много наясно с функцията for. Четох за нея в php и пак нещо не ми е ясно как да я напиша. Няправих няколко неуспешни опита с for и след 3 часа мотане го я направих с foreach.
Foreach се ползва за всякакви iterable неща, едни от които са масивите.

foreach ( $array as $key => $value )

е общият вид. В твоя случай можеш да изпуснеш $key:

foreach ( $searched_times as $search_term)

Ако искаш да го направиш с обикновен for:

$search_items_count = count($search_items);

for($i = 0; $i < $search_items_count; ++ $i) {
echo $search_items[$i];
}

А с въпроса за like какво стана?
 
anonimen каза:
Foreach се ползва за всякакви iterable неща, едни от които са масивите.

foreach ( $array as $key => $value )

е общият вид. В твоя случай можеш да изпуснеш $key:

foreach ( $searched_times as $search_term)

Аз така съм го направил с foreach и не ми показва всичките. Като напиша една дума или част от нея работи, но когато напиша две думи разделени със запетая не работи.


anonimen каза:
А с въпроса за like какво стана?

Добавих го в примера и за сега работи, но както споменах горе само с една дума.


Редакция:

Направих го с for и ми излизат само въведените думи без резултата свързан с тях.
Примерно въвел съм думата "ден, година" и ми излизат двете думи без резултат с тях
 
Как разбиваш търсения стринг в масив? Аз бих го разделял със спейсове, вместо със запетаи:

$searched_terms = explode(' ', $searched_string);

Ползвай

var_dump($searched_item_array);

за да видиш как са се разбили думите.
 
anonimen каза:
Как разбиваш търсения стринг в масив? Аз бих го разделял със спейсове, вместо със запетаи:

$searched_terms = explode(' ', $searched_string);

Ползвай

var_dump($searched_item_array);

за да видиш как са се разбили думите.

dunix каза:
Ползвам функция, която ми обръща input-а в array и като напиша в него "ден, година" ми излиза по този начин

PHP:
array(2) { [0]=> string(6) "ден" [1]=> string(13) " година" }

По същия начин, който си казал използвам за разбиването на стринга, но имам ", " вместо "".

$searched_terms = explode(' , ', $searched_string);
 
Аз така съм го направил с foreach и не ми показва всичките. Като напиша една дума или част от нея работи, но когато напиша две думи разделени със запетая не работи.
Т.е. foreach-ът влиза само веднъж ли? А провери ли дали в масива има наистина повече от 1 елементи?

Примерно:

var_dump($keywords);
foreach ( $keywords as $word ) {
echo "Iteration!\n";
}

За да видиш какво точно има в $keywords и колко пъти се изпълнява цикъла.

А какво всъщност става при повече думи? Изкарва ли ти нещо за следващите (дори и "няма резултати") или не изкарва абсолютно нищо?
 
anonimen каза:
А какво всъщност става при повече думи? Изкарва ли ти нещо за следващите (дори и "няма резултати") или не изкарва абсолютно нищо?

Когато въведа една дума или две думи

8c6edaf9ea.png


8c6e1bb2c2.png


Ето го и кода за търсене

PHP:
$intArr  = explode(',', $arrayInteresiInput);
$result = $db->query("SELECT * FROM `interesi` WHERE `titleName` LIKE '%" . $intArr  . "%'");
if ($result->num_rows > 0) { 
	while ($row = $result->fetch_array()) {
		$storeArray[] =  $row;  
	}
	foreach ($storeArray as $row => $value) {
		$title = $value['titleName'];
		echo "Key: $row; Value: $title<br />\n";
	}
} else {
		echo "No result";
}
 
Това:
Код:
$result = $db->query("SELECT * FROM `interesi` WHERE `titleName` LIKE '%" . $intArr  . "%'");

Е нормално да не работи, тъй като $intArr в тази заявка е "Array". Като стринг, но думичката array. :)

По-скоро ти трябва нещо от сорта на:

Код:
$like = '';

foreach($intArray as $key => $element) {
    if($key !=0 ) 
        $like .= ' AND ';
    $like .= ' `titleName` LIKE \'%'.$element.'%\' ';
}

И после:
$result = $db->query("SELECT * FROM `interesi` WHERE {$like}")
 
Сега ми изкарварезултат, като въведа една дума, а като въведа две не ми изкарва. Като направих заявка в phpmyadmin не ми изведе никакви резултати. Не знам защо. Замених

PHP:
 $like .= ' AND ';
със
PHP:
$like .= ' OR';

и ми показа резултат само на първата дума. Втората изобщо не фигурираше в търсенето

Редакция:
Не ми извежда резултат за втората дума, защото има разстояние.
Демек думапта е така " дума", а трябва да е "дума"

Редакция 2:

Добавих преди
PHP:
$like .= ' `titleName` LIKE \'%'.$element.'%\' ';

PHP:
$element= ltrim($element);

за да премахва разстоянията и да търси по самата дума.

Сега работи и искам да попитам как мога да направя когато има някоя въведена дума, която я няма в базата данни да ми изведе думата/думите и да ми каже, че няма съвпадение с тях. Както казах по-рано: търся музика, филми, футбол (които ги има в базата данни) и право (което го няма в базата данни) да ми покаже най-отгоре думите за които няма съвпадение и след това да ми изведе данни за думите със съвпадения.

ПС: Ще създам нова тема за новия си въпрос
 

Back
Горе