MySQL aralıksız bir kısmını Geting?

4 Cevap php

Is there any way to get just a part from MySql cell and ignore everything after predefined character? For example, I have row with cell's "ID, LINK, PHONE". Inside LINK cell DB wrights links like mysite.com/mypicture.jpeg. Is there any way, to get just "mysite.com" from this cell and ignore everything after slash, so I can echo it inside anchor tag?

Edit: kesinlikle açıkça ben varolan kodu ilanıyla olmak için:

<?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 Cevap

Bir çözeltisi, PHP tarafında, strpos ve substr , kullanmak olabilir:

  • karakterin konumunu bulmak
  • ve önce / sonra ne gelir ayıklayın.

Örneğin bu gibi biraz:

$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);
}

Seni alacak olan:

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


If you know there will always be one (and only one) slash in your data, you can also use
explode and list :

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

Size aynı çıktıyı verecektir:

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


Another idea would be to do that on the SQL side -- if you need both fields, though, doing it on the PHP side is not a bad idea (both sides, PHP and SQL, are valid, actually).


EDIT after the comments.

Eğer döngü için böyle bir şey, ne:

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>";
    }
}

Daha önce yaptığı gibi her bir hat için, sen, $http_link değişkeni $row->link alıyorsanız.

Daha sonra:

  • Eğer '/' önce gelen kısmını ayıklamak; ve web sitesinin kök bağlamak için, a href etiketi için kullanabilirsiniz
  • Eğer görüntüyü göstermek için, img src etiketi, DB tam URL'yi kullanın

Ve eklemek unutma 'http://' hem URL'ler için gerekli eğer ilk etapta yaptığımız gibi, sadece bir tane vardı.

Kod test olmadığını, ancak size bir olası çözümün bir ipucu vermelidir: Not.

Bu :-) yardımcı olur umarım

SEÇ SUBSTRING_INDEX (link, '/', 1);

hile yapmak gerekir. Bu ilk çizgi karakteri önce her şeyi dönecektir

Böyle bir şey:

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

çalışmak ya da tam adresler olacaktır.

edit: Kısmi url eklendi örnek:

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

Senin durumunda, yerine

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

ile

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

This should work assuming your urls are always without the http:// part. (if they are ileit, use the other example I provided).

Eğer istemci tarafında var bir zamanlar bir seçenek veritabanı tarafında LINK sütun üzerinde veya veri altdizesine kullanılarak, ama burada ne yaptığınızı bağlı olarak ve kaç satır Bu tabloda bekleyebilirsiniz, ben o kırılma düşünün Sadece eklemek seferde kez hesaplamak zorunda böylece tabloda ayrı bir sütun içine alanına. Sonra endeksi, kolayca, takılmış olmanın vb belli olanları engelleyebilirsiniz

Sizin ihtiyaçlarınıza bağlı olarak, oradan gidiyor, daha fazla sadece bir kez host ve domain bölümlerini depolamak ve geri yol ve dosya adı için bir anahtara sahip amacıyla LINK normalleştirmek için isteyebilirsiniz. Hepiniz bunu yapabilirsiniz ve daha sonra kolaylık için size uygulama ve kullanımı kullanıcılar için hep birlikte onları çekmek için bir görünüm yapabilirsiniz.