有没有办法从MySql单元中获取一部分并忽略预定义字符后的所有内容? 例如,我有一行单元格的“ID,LINK,PHONE”。内置 LINK 单元格DB wrights链接,例如 mysite.com/mypicture.jpeg 。有没有办法,从这个单元格中获取“ mysite.com ”并忽略斜线后的所有,这样我就能在锚标记中回显它?
编辑:绝对清楚我正在发布现有代码:
<?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>";
}
}
?>
答案 0 :(得分:3)
SELECT SUBSTRING_INDEX(link,'/',1);
应该做的伎俩。它将返回第一个斜杠字符
之前的所有内容答案 1 :(得分:1)
PHP方面的解决方案可能是使用strpos和substr
来:
有点像这样,例如:
$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)
如果您知道数据中总会有一个(且只有一个)斜杠,您还可以使用explode和list:
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://
”,就像您在第一个网址时所做的那样。
注意:该代码未经过测试,但应提供可能的解决方案。
希望这会有所帮助: - )
答案 2 :(得分:1)
这样的事情:
SELECT substring_index(substring_index('http://google.com/path?blah=1&2.1','/',3),'/',-1)
将工作或完整网址。
编辑:为部分网址添加了示例:
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://部分。 (如果他们使用它,请使用我提供的另一个例子。)
答案 3 :(得分:0)
在客户端使用数据库端或数据上的LINK列上的子字符串是一个选项,但是根据您在此处所做的以及此表中可以预期的行数,我会考虑将该字段分解为表中的单独列,这样您只需在插入时计算一次。然后你可以索引它,轻松阻止某些插入,等等。
从那里开始,根据您的需要,您可能希望进一步规范化LINK,以便仅存储主机和域部分一次,并将密钥返回到路径和文件名。您可以完成所有这些操作,然后为方便起见,您可以将它们全部拉到一起,供应用程序和用户使用。