2012-05-26 32 views
0

我有兩個表:MySQL的 - 返回時,行不以其他表存在或存在,並且字段大於X

鏈接

| id | ... 
    1 
    2 
    ... 

點擊

| linkid | userid | click_date | 
    1  | 2 | ... 
    4  | 2 | ... 
    5  | 3 | ... 

當用戶點擊鏈接添加到點擊鏈接。

我想使用MySQL查詢來僅返回用戶沒有點擊的鏈接 - 對錶linkid:userid不包含在表中或click_date(來自Unix時代的secs)在格林威治標準時間昨天。

+0

BTW。這是PHP腳本,我可以使用任何PHP函數。 – djmati11

回答

1
SELECT DISTINCT links_clicks.linkid FROM 
(SELECT links.id AS linkid 
FROM links 
LEFT JOIN clicks ON links.id = clicks.linkid 
WHERE links.id IS NULL OR clicks.click_date <= CURDATE()) 
AS links_clicks; 
+0

這將返回兩個表中的所有collumns,是嗎? 這是可能只返回鏈接的列? – djmati11

+0

不,僅限links.id。 – Ruben

+0

這將導致我做兩個查詢,如果這可能我只想要一個。 – djmati11

0

使用JOIN操作。我不確定WHERE語句的條件,您可能需要修改它。

SELECT id FROM links 
JOIN 
SELECT linkid FROM clicks WHERE (userid IS null) 

使用PHP Mysql模塊執行SQL查詢。

例如

mysql_connect("localhost", "mysql_user", "mysql_password") or 
    die("Could not connect: " . mysql_error()); 
mysql_select_db("mydb"); 
$query = "THE SQL STATEMENT FROM ABOVE"; 
$result = mysql_query($query); 
+0

這隻會返回並非從未被用戶點擊過的鏈接。 – djmati11

0

這是一個簡單的查詢:

select * from link 
where id not in (
    select linkid 
    from clicks 
    where userid = $userid 
    and click_date >= current_date) 

此內部查詢發現,已被點擊用戶今天所有鏈接,並not in (...)語法意味着你將不會獲得這些鏈接。

此查詢給出了問題要求的內容。

+0

我已經說過:只有今天沒有被點擊的鏈接。 – djmati11

+0

這是什麼!用戶今天點擊的鏈接是通過'not in(...)'語法的外部查詢結果中的** NOT **。 – Bohemian

+0

哦,作品......但我標記的答案在我的桌子上工作得更快。 – djmati11

0

的SQL SELECT來選擇,在給定#userid用戶沒有點擊的所有鏈接:

select * from links where id not in(select linkid from clicks where userid = #userid) 

和選擇所有的點擊用戶點擊昨天

select * from links a inner join clicks b on(a.id = b.linkid) where date(click_date) = date(DATE_ADD(CURDATE(), INTERVAL -1 DAY)) and userid = #userid 

,如果你想要一起

select * from links where id not in(select linkid from clicks where userid = #userid) or 
id in(select linkid from clicks where date(click_date) = date(DATE_ADD(CURDATE(), INTERVAL -1 DAY)) and userid = #userid) 
相關問題