変更する必要があるクエリがあります。クエリが現在行っていることは、広告のタイトルと広告の説明に基づいて検索結果 (広告) を返すことです。いずれかの検索語が広告のタイトルまたは広告の説明で見つかった場合、それらの結果が返されます
各広告が特定の広告タイトルに対して 1 回だけ検索結果に表示されるようにクエリを変更したい...したがって、検索で特定の単語に対して同じ広告タイトルを持つ 5 つの広告が見つかった場合、1 つの広告のみが返されるはずです。その広告タイトルに...
$sql = "SELECT a.*, UNIX_TIMESTAMP(a.createdon) AS timestamp, ct.cityname,
COUNT(*) AS piccount, p.picfile,
scat.subcatname, cat.catid, cat.catname $xfieldsql
FROM t_ads a
INNER JOIN t_cities ct ON a.cityid = ct.cityid
INNER JOIN t_subcats scat ON a.subcatid = scat.subcatid
INNER JOIN t_cats cat ON scat.catid = cat.catid
LEFT OUTER JOIN t_adxfields axf ON a.adid = axf.adid
LEFT OUTER JOIN t_adpics p ON a.adid = p.adid AND p.isevent = '0'
LEFT OUTER JOIN t_featured feat ON a.adid = feat.adid AND feat.adtype = 'A'
WHERE $where
AND $visibility_condn
AND (feat.adid IS NULL OR feat.featuredtill < NOW())
$loc_condn
GROUP BY a.adid
ORDER BY a.createdon DESC
LIMIT $offset, $ads_per_page";
編集: $where には検索式が含まれています...正規表現検索が有効になっている場合は正規表現を使用します。それ以外の場合は無効です... $sqlsearch にはユーザーが入力した検索語が含まれています...
if ($regex_search) {
$where = "(a.adtitle RLIKE '[[:<:]]{$searchsql}[[:>:]]' OR a.addesc RLIKE '[[:<:]]{$searchsql}[[:>:]]')";
} else {
$where = "(a.adtitle LIKE '$searchsql' OR a.addesc LIKE '$searchsql')";