2010-08-29 4 views
0

Comment nous pouvons attribuer une valeur dans la requête
ce que je dois est supposer que j'écrire une requête pour un résultat de sortie en utilisant match contre je reçois un tas de résultat comme Comment nous pouvons attribuer une valeur dans la requête 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
etc ... Ce que je demande. i besoin que 2 résultat de chaque domain.Can j'utilise comme celui-ci

 
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

Et Re début de l'étape 1, dans le redémarrage si http://www.flipkart.com/account22.php vient, à l'étape 3 Ajouter le http://www.flipkart.com/account22.php à résultat et classement set = 2 après le rang est mis à 2 si tout autre résultat est venu avec le nom de domaine http://www.flipkart.com/ il devrait être éviter.

puis-je écrire requête pour ce ?? comment ?? les gars pouvez-vous me donner un exemple?

Répondre

0

Je diviser l'URL en quelques champs pour cela. Probablement « domaine » et « path »

Cela vous donne la

suivante
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 

Maintenant, vous pouvez faire des choses comme:

SELECT DISTINCT domainname FROM domain_tables 

Suivi par une boucle de (si PHP est votre langue de fin):

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 
} 

Vous pouvez également utiliser probablement une joint à faire la même chose, mais je ne suis pas sûr de savoir comment le faire hors e Le dessus de ma tête.

+0

Thks pour la réponse, je vais avoir au sujet 275000 des lignes déjà présentes dans la base de données , en prenant chacun et en changeant les valeurs n'est pas un onr facile – Jesvin

0

La tâche d'extraire le nom de domaine hors de l'URL est le plus grand défi, et serait plus performant si vous pouviez ajouter une nouvelle colonne à la table - domain ou similaire. Cela rendrait l'interrogation beaucoup plus facile à l'avenir. Vous pouvez même utiliser la fonction suivante pour UPDATE sur cette nouvelle colonne si possible.

Sauf que implement a user defined function in MySQL, similaire à celui-ci de "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 

Une fois que vous faites cela, (en supposant que vous avez une carte d'identité ou autre chose qui juge l'ordre):

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 
Questions connexes