2011-05-11 49 views

回答

2
SELECT * 
FROM a JOIN b 
    ON a.id = LEFT(REVERSE(b.link),LOCATE('=',REVERSE(b.link))-1) 
  1. REVERSE b.link
  2. 找到 '='(LOCATE)中第一次出現的逆轉b.link
  3. 提取逆轉的LEFT部分從0到b.link的「=」第一次出現負1的位置

你也可以用正確的方式:

SELECT * 
FROM a JOIN b 
    ON a.id = RIGHT(b.link,LOCATE('=',REVERSE(b.link))-1) 

第二個選項,一個功能較少的話應該比第一

這不是測試,但如果你的鏈接都相同的模式它應該工作

+0

W000這是一個奇特的解決方案,我喜歡這個:)我會建議添加一個列,但這肯定是解決方案,如果這不是一個選項! – Michael

+0

這聽起來很有希望。我會檢查一下 –

1

你最好的方法是在表b中添加一個額外的列,並在最初添加記錄時通過服務器端腳本添加該ID。它會讓你的SQL上更快

+0

我要去猜測,表不可改變。 @yann,這是真的嗎? – MJB

+0

是的,不幸的是我無法改變第二張桌子。 –

0

我會嘗試這個速度:

Table a 
id | title 
12 | category1 


Table b 
id | link       | a_id 
45 | index.php&view=myview&id=12 | 12 

查詢:

Select * FROM a JOIN b ON a.id = b.a_id WHERE a.id = 12 
相關問題