我们如何在查询中分配值我需要的是什么 假设我使用匹配来编写输出结果的查询 我得到了一堆结果
http://www.flipkart.com/account.php等..... 我在问什么 我只需要每个域2个结果。我可以像这样使用
http://www.thomas.com/account.php
http://www.flipkart.com/account22.php
http://www.flipkart.com/account45.php
http://www.thomas.com/account22.php
http://www.thomas.com/account45.php
Step 1:Set DomainName=http://www.flipkart.com/ and Let Rank =0
Step 2:DomainNameofResult= DomainNameofR(http://www.flipkart.com/account.php)
(finding the domain name of result using substring or regular expression) Step 3:if DomainName=DomainNameofResult then Add the http://www.flipkart.com/account.php to result and set rank =1 else avoid the current domain
如果http://www.flipkart.com/account22.php重启,请从步骤1重新开始 来,在第3步添加http://www.flipkart.com/account22.php 结果并设置rank = 2 如果任何其他结果带有域名,则在排名设置为2之后 http://www.flipkart.com/应该避免。
我可以为此编写查询吗??你们可以给我一个例子吗?
答案 0 :(得分:0)
我会将URL拆分为几个字段。可能是“域名”和“路径”
这会给你以下
domains_table
domain | path
-----------------+-------------
www.flipkart.com | /account.php
www.thomas.com | /account.php
www.flipkart.com | /account22.php
www.flipkart.com | /account45.php
www.thomas.com | /account22.php
www.thomas.com | /account45.php
现在,您可以执行以下操作:
SELECT DISTINCT domainname FROM domain_tables
接下来是一个循环(如果PHP是你的结束语):
foreach($domain as $d){
mysql_query("SELECT CONCAT("http://",domain,path) as url FROM domains_table WHERE domain=? LIMIT 2", $d);
//Then store the result somewhere
}
你也可以使用一些连接来做同样的事情,但我不知道如何做到这一点。
答案 1 :(得分:0)
从URL中提取域名的任务是最大的挑战,如果您可以向表格domain
或类似地添加新列,则会更高效。这将使将来查询变得更加容易。如果可能的话,您甚至可以在新列上使用以下函数UPDATE
。
除此之外,implement a user defined function in MySQL,与“How to Parse a Domain Name from a URL using SQL”中的此类似。
CREATE FUNCTION `extract_domain_from_url`(url VARCHAR(5000)) RETURNS varchar(500)
BEGIN
DECLARE output_domain VARCHAR(500);
--implementation
RETURN output_domain;
END
一旦你这样做,那么(假设你有一个ID或其他判断顺序的东西):
SELECT *
FROM MyTable AS o
WHERE
(SELECT COUNT(*)
FROM MyTable
WHERE extract_domain_from_url(url) =extract_domain_from_url(o.url)
AND id >= o.id) <= 2
ORDER BY url