2011-10-28 70 views
1

我有一個表廣東話構建無子查詢

CREATE TABLE logs(
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    ip INT(11) UNSIGNED NOT NULL, 
    `date` TIMESTAMP, 
    `time` INT(11) UNSIGNED NOT NULL, 
    referrer VARCHAR(255) NOT NULL, 
    uri VARCHAR(255) NOT NULL, 
    PRIMARY KEY (id), 
) 

MySQL的選擇查詢,我需要通過IP獲取以下數據組則:

  • IP
  • 引薦,這是第一次對IP (日期爲分)
  • 上次訪問uri的IP
  • 獨特uris的數量

是否可以在沒有子查詢的情況下編寫這樣的查詢?

我與子查詢的解決方案:

SELECT 
    `logs`.`ip`, 
    (SELECT 
     `tmp`.`referrer` 
    FROM 
     `logs` AS `tmp` 
    WHERE 
     `tmp`.`ip` = `logs`.`ip` 
    ORDER BY `tmp`.`date` 
    LIMIT 1) 'referrer', 
    (SELECT 
     `tmp`.`uri` 
    FROM 
     `logs` AS `tmp` 
    WHERE 
     `tmp`.`ip` = `logs`.`ip` 
    ORDER BY 
     `tmp`.`date` DESC 
    LIMIT 1) 'uri', 
    COUNT(DISTINCT (`logs`.`uri`)) 'urls' 
FROM 
    `logs` 
GROUP BY 
    `logs`.`ip` 

回答

0
select 
    `logs`.`ip`, 
    `tmp`.`referrer` 
    `tmp`.`uri` 
    count(distinct `logs`.`uri`)) as `urls` 
from `logs` 
left join `tmp` on `tmp`.`ip`=`logs`.`ip` 
group by `logs`.`ip` 

然而,這並不允許order by tmp.date一部分。如果絕對需要,請在評論中告訴我,我會更新此代碼以允許這樣做。