реализация myqls Query join и Union ALL для нескольких таблиц с PHP в поиске сфинксов

Я устал от myqsl-подобного и полнотекстового поиска из-за неподходящих функций поиска, которые мне нужны, и я хочу реализовать sphinx как без поисковых терминов, так и с поисковым запросом на моем vps ipage хостинге.

У меня есть база данных с таблицами (1) курс, (2) страна и (3) университет.

Таблица страны имеет столбцы, такие как имя, friendly_name, at, население, президент, флаг, address_of_headquarter, about, Democra__day. Я хочу указывать только имя и фамилию, но не население, президента, флаг.

В университетской таблице есть такие столбцы, как имя, friendly_name, на кафедре no_of, Vice_chancellor, staff_strength, изображение, about_university. Я хочу индексировать только название и about_university, но не в no_of кафедре, изображение.

Таблица курса имеет столбцы, такие как имя, friendly_name, отдел, school_fee, type_of_degree, currency, pay_after_grad, about_profession. Я хочу индексировать только name и about_profession, pay_after_grad, type_of_degree, school_fee, но валюту.

require_once('C:/sphinx/api/sphinxapi.php');
$s = new SphinxClient;
$s->setServer("127.0.0.1", 9312); // NOT "localhost" under Windows 7!

$s->SetLimits(0, 25);
$result = $s->Query ("" , "market_shop_product" );
$no=0;
print_r($result['warning']);
if ($result['total'] > 0) {
echo 'Total: ' . $result['total'] . "<br>\n";
echo 'Total Found: ' . $result['total_found'] . "<br>\n";
echo '<table>';
foreach ($result['matches'] as $id => $otherStuff) {
if (isset($search))
{$row = mysqli_fetch_assoc(mysqli_query($con, "SELECT country.*,  COUNT(univeristy.country) AS amount FROM country
LEFT JOIN univeristy ON country.id=univeristy.country
LEFT JOIN course ON univeristy.id = course.country
MATCH(country.`name`, country.`address`, country.`about`, country.`country`, country.`city`) AGAINST('{$search}' IN NATURAL LANGUAGE MODE) OR
  MATCH(`university`.`university`, `university`.`deal`) AGAINST('{$search}') OR
   MATCH(`course`.`name`, `course`.`price`, `course`.`measure`)
    AGAINST('{$search}')"));} else {$row = mysqli_fetch_assoc(mysqli_query($con, "SELECT country.*,  COUNT(university.country) AS amount FROM country
LEFT JOIN univeristy ON country.id=univeristy.country
LEFT JOIN course ON univeristy.id = course.country
WHERE(country.`country`='{$country}') GROUP by market.id ORDER BY amount DESC
"));}
extract($row);
++ $no;
echo " $name - $country <br>";
}
} else {
echo 'No results found';
}

это для sphinx.conf

sql_query           = \
                        SELECT  country.`id`,country.`name`, country.`friendly_url`, country.`address`, country.`country`, country.`city`, country.`about`,  country.`state`,  university.name, university.about_university,  course.about_profession, course.pay_after_grad, course.type_of_degree, course.school_fee, course.name AS cour \
                        FROM country \
                        LEFT JOIN university ON country.id = university.country \
                        LEFT JOIN course ON country.id =  course.country 
    sql_attr_uint       = country

SQL

SELECT  `university`, CONCAT('is a ',  `deal`, ' university') AS sell, `pic`, 'university' AS source, CONCAT(friendly_university, '/{$url}') AS link FROM university WHERE country='{$country}' AND MATCH (`university`, `deal`) AGAINST('{$search}' IN NATURAL LANGUAGE MODE) LIMIT 8
UNION ALL
SELECT   `name`, CONCAT( 'average price is ',`currency`, AVG(`price`))  AS priceaverage,  `image`, 'course' AS source, CONCAT(friendly_course, 'AT{$url}') AS link FROM course WHERE `country`='{$country}' AND `univeristy`='{$page}' AND MATCH(`name`, `price`, `measure`) AGAINST('{$search}' IN NATURAL LANGUAGE MODE) LIMIT 8
 ";
0
задан Your Common Sense 27 June 2019 в 09:47
поделиться