Получение части строки MySql? - PullRequest
       20

Получение части строки MySql?

1 голос
/ 13 сентября 2009

Есть ли способ получить только часть из ячейки MySql и игнорировать все после предопределенного символа? Например, у меня есть строка с ячейкой "ID, LINK, PHONE". Внутри LINK ячейки БД размещаются ссылки типа 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 ]

3 голосов
/ 13 сентября 2009

SELECT SUBSTRING_INDEX (ссылка, '/', 1);

должен сделать трюк. Он вернет все до первого символа косой черты

1 голос
/ 13 сентября 2009

Примерно так:

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

будет работать или полный URL.

edit: добавлен пример для частичного 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");

Это должно работать, предполагая, что ваши URL всегда без http: // part. (если они с этим, используйте другой пример, который я предоставил).

1 голос
/ 13 сентября 2009

Решением на стороне 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, для ссылки на корень сайта
  • вы используете полный URL из БД, для тега img src, чтобы отобразить изображение

И вы не забудьте добавить «http://», если необходимо, к обоим URL-адресам, как вы делали в первый раз, когда у вас был только один.

Примечание: этот код не тестируется, но должен дать вам подсказку о возможном решении.

Надеюсь, это поможет: -)

0 голосов
/ 13 сентября 2009

Использование подстроки в столбце LINK на стороне базы данных или данных, если у вас есть на стороне клиента, вариант, но в зависимости от того, что вы здесь делаете, и сколько строк вы можете ожидать в этой таблице, я бы рассмотрите возможность разбить это поле на отдельный столбец в вашей таблице, чтобы вычислить его только один раз во время вставки. Затем вы можете проиндексировать его, легко заблокировать вставку определенных файлов и т. Д.

Исходя из этого, в зависимости от ваших потребностей, вы можете захотеть дополнительно нормализовать ССЫЛКУ, чтобы сохранить части хоста и домена только один раз и получить ключ к пути и имени файла. Вы можете сделать все это, а затем для удобства вы можете собрать их все вместе для вашего приложения и пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...