我们如何在mysql查询中分配一个值

时间:2010-08-29 02:20:59

标签: mysql

我们如何在查询中分配值我需要的是什么 假设我使用匹配来编写输出结果的查询 我得到了一堆结果

http://www.flipkart.com/account.php 
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
等..... 我在问什么 我只需要每个域2个结果。我可以像这样使用

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/应该避免。

我可以为此编写查询吗??你们可以给我一个例子吗?

2 个答案:

答案 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