我在数据库中插入一个人来自的上一个链接,如tihs:
$came_from = $_SERVER['HTTP_REFERER']; // get previous link
如果链接来自google.com,它将会是这样的:
http://www.google.com/#sclient=psy&hl=en&source=hp&q=this+is+a+test&pbx=1&oq=this+is+a+teat&aq=f&aqi=g-s1g-v1&aql=1&gs_sm=s&gs_upl=887l82702l3.10.3.1l17l0&bav=on.2,or.r_gc.r_pw.r_cp.&fp=c3d3303&biw=1920&bih=995
如果我们查看内部,我们可以找到q=this+is+a+test
作为我搜索的关键字。
我的问题是我如何创建一个返回http://www.google.com/ | this+is+a+test
的查询?
我知道关键字之间有+
符号。
SELECT SUBSTRING_INDEX (table, '+', 1), table FROM table.table WHERE table LIKE '%+%' LIMIT 20
任何想法?
感谢
编辑:发生的事情是,有时我得到的其他网址没有q=
但可能是seearch=
,所以我想跟踪+
符号
答案 0 :(得分:2)
正如已经指出的那样,如果不提供要查找的参数,就无法可靠地获取关键字。这就是我要做的事情:
$url = 'http://www.google.com/#sclient=psy&hl=en&source=hp&q=this+is+a+test&pbx=1&oq=this+is+a+teat&aq=f&aqi=g-s1g-v1&aql=1&gs_sm=s&gs_upl=887l82702l3.10.3.1l17l0&bav=on.2,or.r_gc.r_pw.r_cp.&fp=c3d3303&biw=1920&bih=995';
$possible = array('q', 'ssearch', 'oq');
$query_str = NULL;
foreach ($possible as $search) {
if (isset($arr[$search])) {
$query_str = $arr[$search];
break;
}
}
基本上所有这一切都是使用PHP的parse_str()
解析url并查找参数q。如果不存在,则使用ssearch,然后使用oq。如果需要,您可以添加更多。如果在它的末尾找不到它,$ query_str将为NULL。
除非你有一个非常令人信服的理由只使用MySQL,否则只需处理PHP端的所有内容。数据库用于存储数据,而不是处理数据。我要做的是让PHP弄清楚搜索引擎和使用的关键字,并将它们作为单独的字段插入到数据库中。即,有一个像这样的表:
search_engine | query_str
------------- | -----------
google | test
yahoo | something
...
答案 1 :(得分:0)
如果你知道你需要q = ...那么你可以使用正则表达式。如果那是你需要的,我会更新帖子。
答案 2 :(得分:0)
正如大家所说,您需要使用键值(在您的示例中为q
)。在MySQL中,你可以这样做:
SELECT SUBSTRING_INDEX(table, '?q=', -1), table FROM table.table WHERE table LIKE '?' LIMIT 20
我还建议您将表格列重命名为“table”以外的其他内容。