簡體   English   中英

查找逗號分隔的關鍵字列表

[英]Finding a list of comma separated keywords

運行代碼時,無法檢索到我定位的條目,因為通過查詢運行的關鍵字與數據庫中的關鍵字不同。

關鍵字:

$keywords = 'spaghetti,macaroni,hamburger';

查詢:

mysql_query("SELECT * FROM ---- WHERE keywords LIKE '%$keywords%' ORDER BY id DESC LIMIT 1");

我的目標是使用這些關鍵字的條目:

food, restaurant, hamburger, spaghetti, taco,pie

因為我已經連續工作了12個小時,所以這里可能缺少一些簡單的東西。 但是,我為解決此問題所做的任何嘗試都沒有運氣。

從我的角度來看,該查詢應返回目標條目,因為有2個匹配的關鍵字。

我應該怎么做?

你需要打破的關鍵字,做一個單獨的LIKE為每一個比較

SELECT * FROM mytable
WHERE keywords LIKE '%spaghetti%' OR keywords LIKE '%macaroni%'
-- ...

你可以做這樣的事情

<?php

$keywords = 'spaghetti,macaroni,hamburger';

$query = "SELECT * FROM mytable WHERE 1=1";

$keywords = explode(',', $keywords);

if (count($keywords)) {
    $query .= sprintf(
        " AND (%s)",
        implode(' OR ', array_map(function($word){
            return "keywords LIKE '%{$word}%'";
        }, $keywords))
    );
}

echo $query;

// SELECT * FROM mytable WHERE 1=1 AND (keywords LIKE '%spaghetti%' OR keywords LIKE '%macaroni%' OR keywords LIKE '%hamburger%')

從評論中可以看到,有更好的方法來解決此問題,但是我假設這個基本問題正在尋找一個簡單的答案。

我沒有進行任何輸入清理,也沒有添加任何其他故障保險櫃。 建立這樣的查詢不是很可靠,您應該繼續學習PHP / MySQL以避免將來遇到常見的陷阱。 但是,我認為目前尚無法使用更高級的方法。 如果其他人想提供他們認為OP可以掌握的更好的技術,那就去吧:)

$like = array();
$keywords = explode(',' , $keywords);
foreach($keywords as $keyword) {
  $like[] = "`keywords` LIKE '%$keyword%'";
}
$like = implode(' OR ', $like);
$query = "SELECT * FROM `table` WHERE $like ORDER BY id DESC LIMIT 1";

在列中將多個值存儲為CSV是一種常見的SQL反模式。 它很難使用,甚至難以優化:

如何修復末尾逗號分隔列表

試試這個,它可能比使用多個or子句更快

Select * from mytable
where keywords REGEXP 'spaghetti|macaroni|hamburger'

您必須將LIKE與分離的作品一起使用,可以嘗試以下操作:

$keywords = 'spaghetti,macaroni,hamburger';

$arrayWords = explode(',', $keywords);

$like = '';

foreach($arrayWords as $word)
    $like .= empty($like) ? " keywords LIKE '%$word%' " : " OR keywords LIKE '%$word%' ";

mysql_query("SELECT * FROM ---- WHERE $like ORDER BY id DESC LIMIT 1");
mysql_query("SELECT * FROM ---- WHERE keywords LIKE '%". implode("%' OR keywords LIKE '%", explode(",", $keywords)) ."%' ORDER BY id DESC LIMIT 1");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM