2009-09-13 76 views
1

有沒有什麼辦法從MySql單元獲取一部分並在預定義字符後忽略所有內容? 例如,我有單元格的「ID,LINK,PHONE」行。 Inside LINK cell DB wrights鏈接如mysite.com/mypicture.jpeg。有沒有什麼辦法,從這個單元格得到「mysite.com」,並忽略所有內容斜槓,所以我可以在錨標籤中回顯它?獲取MySql行的一部分?

編輯:要絕對清楚我張貼現有代碼:

<?PHP 
if(mysql_connect($db_host,$db_user,$db_pass)) { 
    mysql_select_db($db_name); 
    mysql_query("CREATE TABLE IF NOT EXISTS smsads(id bigint unsigned primary key auto_increment, link varchar(255), fromnum varchar(60))"); 
    $res = mysql_query("SELECT * FROM smsads ORDER BY id DESC LIMIT 3"); 
    while($row = mysql_fetch_object($res)) { 
     $http_link = $row->link; 
     if(strstr($http_link, 'http') === FALSE) $http_link = 'http://'.$http_link; 
     echo "<div id=\"banner\"><a href=\"{$http_link}\" target=\"_blank\"><img src=\"{$http_link}\" /></a></div>"; 
    } 
} 
?> 

回答

1

一種解決方案,在PHP端,可能是使用strpossubstr,到:

  • 發現字符的位置
  • 並提取前後的內容。

有點像這樣,例如:

$str = 'mysite.com/mypicture.jpeg'; 

$position = strpos($str, '/'); 
if ($position !== false) { 
    $before = substr($str, 0, $position); 
    $after = substr($str, $position+1); 
    var_dump($before, $after); 
} 

這將讓你:

string 'mysite.com' (length=10) 
string 'mypicture.jpeg' (length=14) 


如果你知道總會有一個(也是唯一一個)在您的數據斜槓,您還可以使用explodelist

list($before, $after) = explode('/', $str); 
var_dump($before, $after); 

,這將給你相同的輸出:

string 'mysite.com' (length=10) 
string 'mypicture.jpeg' (length=14) 


另一個想法是做SQL一邊 - 如果你需要這兩個領域,但是,這樣做在PHP端是不是一個壞主意(雙方,PHP和SQL,實際上是有效的)


評論後編輯。

什麼這樣的事情,你的循環:

while($row = mysql_fetch_object($res)) { 
    $http_link = $row->link; 
    $position = strpos($http_link, '/'); 
    if ($position !== false) { 
     $before = substr($http_link, 0, $position); 
     if(strstr($http_link, 'http') === FALSE) { 
      $http_link = 'http://'.$http_link; 
      $before = 'http://' . $before; 
     } 
     echo "<div id=\"banner\"><a href=\"{$before}\" target=\"_blank\"><img src=\"{$http_link}\" /></a></div>"; 
    } 
} 

對於每一行,你所得到的$row->link$http_link變量,像你以前那樣。

然後:

  • 您提取前的 '/' 自帶的一部分;並用它爲a href標籤,鏈接到的網站
  • 您使用的完整網址數據庫的根,爲img src標籤,以顯示圖像

而且你不要忘了如果有必要,可以將'http://'添加到這兩個網址,就像您在第一個地方做的那樣,只有一個網址。

注意:該代碼沒有經過測試,但應該給你一個可能的解決方案暗示。

希望這有助於:-)

+0

這聽起來絕對是邏輯。但問題是我沒有預定義的鏈接放在$ str。在我的PHP文件中,即將到來的鏈接在「$ http_link = $ row-> link;」內。 我可以把$ str ='$ http_link';? – Spoonk 2009-09-13 11:58:15

+0

我剛剛使用$ str變量作爲例子;當然,你可以使用任何你想要的變量,包括$ row->直接鏈接。你不應該使用$ str ='$ http_link';儘管如此,因爲簡單引號不允許可變插值。使用$ str = $ http_link;會更好 - 但是,爲什麼不直接使用$ http_link? – 2009-09-13 12:05:01

+0

原諒我的無能,但我真的不知道如何。這是我第一次需要做這種魔法,並且我讀了大約6或7次的帖子,試圖瞭解我發佈的現有代碼中的交易的位置和方式。:( – Spoonk 2009-09-13 12:08:17

1

事情是這樣的:

SELECT substring_index(substring_index('http://google.com/path?blah=1&2.1','/',3),'/',-1) 

將工作或完整的URL。

編輯:添加例如用於部分網址:

select substring_index('google.com/path?blah=1&2.1','/',1); 

在你的情況下,更換

$res = mysql_query("SELECT * FROM smsads ORDER BY id DESC LIMIT 3"); 

$res = mysql_query("SELECT link,substring_index(link,'/',1) host FROM smsads ORDER BY id DESC LIMIT 3"); 

這應該假設您的網址始終沒有http ://部分。 (如果他們使用它,請使用我提供的其他示例)。

+0

把這個放在哪裏?我沒有固定的鏈接。我有一個鏈接變量 - $ http_link。如何包含它?非常感謝您的意見:) – Spoonk 2009-09-13 12:13:45

3

SELECT SUBSTRING_INDEX(link,'/',1);

應該做的伎倆。它將在第一個斜槓字符前返回所有內容

+0

文檔:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index – VolkerK 2009-09-13 11:58:11

0

在客戶端上使用數據庫端的LINK列或數據時使用子字符串是一個選項,但取決於您在此處的操作以及有多少你可以在這個表中預期的行,我會考慮把這個字段分解成表中的一個單獨的列,所以你只需要在插入時計算一次。然後,您可以對其進行索引,輕鬆阻止某些插入內容等。

從那裏開始,根據您的需要,您可能需要進一步標準化LINK以便僅存儲一次主機和域部分,鍵回到路徑和文件名。您可以完成所有這些工作,然後爲了方便起見,您可以製作一個視圖,將它們放在一起供您的應用程序和用戶使用。