2013-10-16 98 views
2

我正在與Twitter相媲美的網站上工作。您可以關注人員併發布消息。SQL/PHP選擇一個跟隨者,你不關注跟隨你的人

我想選擇一個我不關注的人,他跟隨的是我關注的人。 希望你有這句話!

這是我當前使用的SQL查詢,但它無法正常工作。它仍然顯示我已經關注的人。

SELECT a.naar_id 
FROM wievolgtwie a, wievolgtwie b 
WHERE a.van_id = $row[0] 
    AND b.van_id = $_SESSION[id] 
    AND a.naar_id != $_SESSION[id] 
    AND a.naar_id != b.naar_id 
LIMIT 0, 1; 

說明:

naar_id後跟van_id的人的ID。

van_id是遵循naar_id的編號。

van_idnaar_id) 所以行(1,3)和(2,3)表示ID 1和2都遵循ID 3.

wievolgtwie與 'whofollowswho' 信息的表。

van_id, naar_id 
+------+------+ 
| 1 | 2 | 
| 1 | 3 | 
| 2 | 1 | 
| 2 | 4 | 
| 3 | 4 | 
| 3 | 2 | 
+------+------+ 

$row[0]就是我要選擇從他們遵循誰的人跟着你的人,但你沒有。

$_SESSION[id]是你的id(登錄的人)。

因此,如果$row[0] = 2並且登錄的人的id爲1'我';我想獲得ID 4(因爲ID 1是我,我不遵循ID 4)(請參閱示例表)

有沒有人知道我想實現的正確查詢?

由於提前,

的Jeroen

+1

您以'SELECT a.naar_id'開始,您已將其定義爲「您關注的人員的ID」。這不保證總是返回你已經關注的人的身份證嗎?或者我只是不理解你的桌子? –

+0

對不起,那應該是'van_id後面的人的ID' – Jeroen

+0

我添加了一個示例表。我希望現在更清楚一點。 – Jeroen

回答

1

你需要做的就是把一個子查詢在where子句,以確保沒有任何行與您的ID,並在數據庫中和過濾的naar_id那。它應該是這樣的:

SELECT a.naar_id 
FROM wievolgtwie a, wievolgtwie b 
WHERE a.van_id = $row[0] 
    AND b.van_id = $_SESSION[id] 
    AND a.naar_id != $_SESSION[id] 
    AND a.naar_id != b.naar_id 
    AND b.vaan_id NOT IN (SELECT vaan_id 
          FROM wievolgtwie 
          WHERE naar_id = a.naarId) 
LIMIT 0, 1; 

是可能的僞代碼,但這個概念應該工作。

+0

謝謝!我認爲它會工作,但一個。和b。顯然子查詢的東西是要走的路! – Jeroen

1

這是Simon Aronsson回答我後發現的正確查詢!所以謝謝西蒙。

SELECT naar_id 
FROM wievolgtwie 
WHERE van_id = $row[0] 
    AND naar_id != $_SESSION[id] 
    AND naar_id NOT IN (
      SELECT naar_id 
      FROM wievolgtwie 
      WHERE van_id = $_SESSION[id]) 
LIMIT 0, 1; 

它並不需要a.b.東西。只是一個子查詢。

相關問題