Помощ със SQL заявка

kulov

Registered
Примерно във базата данни имам няколко записа

компания155
компания565
компания12435

Имам нужда от примерна заявка която ако напиша примерно: компания11
ще ми изведе резултати в които се съдържа това компания в случая..

А не както ако ползвам LIKE и разните му възможности ако напише компания11 да не ми излязат резултати..
 
PHP:
$string='компания11';
$string=str_replace("1" "", $string);
$string=str_replace("2" "", $string);
$string=str_replace("3" "", $string);
$string=str_replace("4" "", $string);
$string=str_replace("5" "", $string);
$string=str_replace("6" "", $string);
$string=str_replace("7" "", $string);
$string=str_replace("8" "", $string);
$string=str_replace("9" "", $string);
$string=str_replace("0" "", $string);

$row_string=mysql_query("SELECT * FROM `table` 
WHERE pole LIKE '%$string%' ");

while($ss=mysql_fetch_assoc($row_string)) {
echo $ss['pole'];
}

Разбира се може да го направиш и в масив този $string, само ти давам пример как да махнеш числата. Това става и с регулярен израз, но не ги разбирам добре, за това не ти давам пример с тях.
 
eddyy93 каза:
PHP:
$string='компания11';
$string=str_replace("1" "", $string);
$string=str_replace("2" "", $string);
$string=str_replace("3" "", $string);
$string=str_replace("4" "", $string);
$string=str_replace("5" "", $string);
$string=str_replace("6" "", $string);
$string=str_replace("7" "", $string);
$string=str_replace("8" "", $string);
$string=str_replace("9" "", $string);
$string=str_replace("0" "", $string);

$row_string=mysql_query("SELECT * FROM `table` 
WHERE pole LIKE '%$string%' ");

while($ss=mysql_fetch_assoc($row_string)) {
echo $ss['pole'];
}

Разбира се може да го направиш и в масив този $string, само ти давам пример как да махнеш числата. Това става и с регулярен израз, но не ги разбирам добре, за това не ти давам пример с тях.
Мисля, че това с числата го е дал просто като пример. ;)
Чувал съм за нещо наречено full text search, но не съм го ползвал и не знам дали ще ти свърши работа. :)
 
Това с числата, както каза @tedo96 е само пример.. Няма нищо общо с това което на мен ми трябва
 
PHP:
<form method="get" id="searchform" action="search.php" target="_blank">
<input placeholder="Search..." type="text" name="search" id="s" />
</form>
//


$search = $_GET['search'];
mysql_query("SET NAMES utf8");
$query = mysql_query("SELECT * FROM `tablica` WHERE `neshto si`LIKE '%$search%'  ASC");
 
попринцип идеята е да се изкарат всички резултати където се среща тази ключова дума, но въпроса е да извежда и резултати където ключовата дума е само част от самата дума.. както дадах пример

ако ключовата дума е
ключ15

а в базата данни имаме запис
ключ89

пак да изкара резултат, но само за ключ в случая
 
Аха ами то LIKE '%duma%' е на същият принцип по който искаш да ти се извеждат резултатите.

Ето ти примерна заявка за търсачка.

PHP:
$search=$_GET['tursi'];

$words = explode(' ', $search);
$where=array();

foreach ($words as $word) {

        $where[] = "LCASE(pole) LIKE '%" .mb_strtolower($word,'UTF-8')."%'";


$sqls = "SELECT * FROM table WHERE ".implode(" OR ", $where);
$result=mysql_query($sqls) or die ('die:'.mysql_error());


}
 
%$term% - Не върши същата работа..
Ако в базата има фирма6 а ти търсиш само фирма няма да ти излезе резултат..
 
Не схващам много логиката какво искаш да постигнеш, но защо не сложиш един preg_replace на всичко, което не е a-z, по този начин ще вземеш само ключовата дума.
И вече без проблем можеш да си използваш LIKE.

Ако пък LIKE не ти върши работа, защото ако имаш
ключ1
ключч1
ключ

И като търсиш "ключ" ще ти върне и "ключч1" можеш да търсиш с REGEXP в комбинация с горния preg_replace
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
 
Предлагам ти да пробваш функцията SOUNDEX.
Примерна заявка:
Код:
SELECT * FROM `table` WHERE SOUNDEX(`column`) = SOUNDEX('компания11');
 
marian каза:
Предлагам ти да пробваш функцията SOUNDEX.
Примерна заявка:
Код:
SELECT * FROM `table` WHERE SOUNDEX(`column`) = SOUNDEX('компания11');


This function is not guaranteed to provide consistent results with strings that use multi-byte character sets, including utf-8.
 
Честно да ви кажа и аз много се обърквах.. сега се получава точно обратното :D

Чакайте да обясня поне сега какво се получава и какво всъшност трябва да се получи

За ключова дума ползвам думата "рис" - като имам за цел да ми излязат резултати от един запис за една фирма "РИС 6"

Моята идея е резултатите да са само тези, които започват с ключовата дума, в случая "рис".
По тази логика трябва да ползва SQL LIKE - "$word%"
Но когато ползвам кода по този начин не ми връща никакви резултати за нищо..
Когато го напиша така: "%$word%" ми излизат резултатите РИС 6, както трябва но имам и запис като се съдържа името Борисов и ми извежда и него.. а идеята е да извежда резултатите само които почват с ключовата дума "рис"
 
Не, нестава.
Разбрах кога идва проблема, значи това е само когато пиша на Кирилица, тоест като напиша РИС нищо не излиза защото е на кирилица, но когато примерно напиша нещо на латиница, за което се зна, че трябва да има резултат си излиза..
 
Питайте ме не знам как се оправих но това което се мъчих стана.. не беше и от езика дори направо голяма лудница..

НО изникна нов проблем и вместно да пускам нова тема ще пиша направо тук, тей като е свързано..

сега проблема е следният, ТАБЛИЦИТЕ, в които то търси са няколко, тоест имам база данни примерно (databaza) и в нея имам няколко таблици, та да де то търси в тези таблици и вече вътре в полетата, но сега се случи така, че вече търси само в първата таблица, която връща.. много странно това се получи, след като самите заявки които търсят ги вкарах в още едиц цикъл foreach, ще ви дам част от кода..

PHP:
$qSelectSites=mysql_query("SHOW TABLES IN `searchenginedatabase`") or die(mysql_error());
$qSelectSitesNum=mysql_num_rows($qSelectSites);
for ($idao=1; $idao<=$qSelectSitesNum; $idao++) {
	$qSelectSitesRow=mysql_fetch_assoc($qSelectSites);
	$tablee=$qSelectSitesRow['Tables_in_searchenginedatabase'];
			
	foreach ($term as $term) {

надолу почват самите заявки, променливата $tablee държи таблиците, в които трябва да влезе, но след като в последствие се наложи да сложа това foreach от няколко резултата станаха един, ако над foreach изведа $tablee ще ми изведе няколко таблици както трябва, но ако го изведа под foreach ми извежда само първият резултат..
 
eddyy приниципа трябва да е такъв просто.. много неща от идеята и самият код спестявам..

@Soul_Stealler, добре оправих това, но примерно стана така :

foreach ($term_ex as $term2) {

и когато изведа стойността на $term2, тя се върти толкова пъти, колкото по горният цикъл for се върти.. някакви идеи как да го управя, че вече немога.. цял ден се мъча тука с разни простотии и главата ми вече не издържа..
 
Някой да има идея как да избегна двата цикъла ?
Имам в предвид, че първо имам един цикъл, който ми извежда имената на таблиците, от които извеждам резултати, а вторият е foreach цикъл за самите думи, които търсим след като съм ползвал explode за да ги разделя..

EDIT: Сещам се за 1 начин, но не знам дали е възможен.. да избегна първият цикъл, като селектирам всичките таблици в базата данни още направо в заявката за извеждането..

PHP:
$qSelectSites=mysql_query("SHOW TABLES IN `searchenginedatabase`") or die(mysql_error());
$qSelectSitesNum=mysql_num_rows($qSelectSites);
[b]		
while ($qSelectSitesRow=mysql_fetch_row($qSelectSites)) {
	$tablee=$qSelectSitesRow[0];[/b]
			
	[b]foreach ($term_ex as $term_next) {	[/b]			
		$url_array[]="LCASE(`url`) LIKE '%".mb_strtolower($term_next, "UTF-8")."%'";
		$s=mysql_query("SELECT `id`, `main_url2`, `main_title2`, `main_picture2`, `title`, `url`, `text`, `date` FROM `searchenginedatabase` . `$tablee` WHERE 
		".implode(" OR ", $url_array)."
		AND `active` = '1' AND `title` != ''
		GROUP BY `title` ORDER BY `hits` DESC LIMIT 0,2") or die(mysql_error());
				$qSelectResultsUrlNum=mysql_num_rows($qSelectResultsUrl);
$qSelectTable=$qSelectResultsUrl;
$qSelectTableNum=$qSelectResultsUrlNum;

Дефакто трябва да стане SELECT * FROM (WHAT SHOW TABLES RETURN)..
 

Горе