获取MySql行的一部分?

时间:2009-09-13 11:50:50

标签: php mysql

有没有办法从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>";
    }
}
?>

4 个答案:

答案 0 :(得分:3)

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

应该做的伎俩。它将返回第一个斜杠字符

之前的所有内容

答案 1 :(得分: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://”,就像您在第一个网址时所做的那样。

注意:该代码未经过测试,但应提供可能的解决方案。

希望这会有所帮助: - )

答案 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,以便仅存储主机和域部分一次,并将密钥返回到路径和文件名。您可以完成所有这些操作,然后为方便起见,您可以将它们全部拉到一起,供应用程序和用户使用。