MySQL birinci X kelimeleri (sadece karakter) çekin

6 Cevap php

Ben bir önizleme kullanılmak üzere bir veritabanı alanında ilk olarak X kelimeleri çekmeye muktedir istiyorum. Alanın 'nın içeriği oldu Temelde ise

 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada."

Ben yankı istiyorum

 "Lorem ipsum dolor sit amet... see more"

Bunu yapmanın en iyi yolu nedir?

Ben yapacağımı bilmiyorum tek şey o gibi bir şey yapmak, bir sorgudaki tüm alanı toplarlamanızdır

$foo = [query_results];
$bar = explode(' ', $foo);
for($x=0, $x<6, $x++){
     echo $bar[$x];
};
echo "... see more"

Bu daha iyi bir yaklaşım var mı?

6 Cevap

Kesinlikle belirli bir sayısı bir sınırlayıcı meydana dayalı elde edilinceye kadar SUBSTRING_INDEX ki bazı karakterlerin sayısını döndürür kullanmak istiyorum. Senin durumunda çağrı bu gibi görünecektir:

 SELECT SUBSTRING_INDEX(text_field, ' ', 6) FROM ...

Özellikle, bu words biz boşluklarla ayrılmış alanlarda değildir karakter kümesi gibi bir kelime tanımlayabilirsiniz nerede altıya kadar dönecektir.

Note, bu veya arzu olmayabilir geçen kelime, bağlı noktalama dönecektir. Bu PHP dize kuyruk herhangi bir noktalama karakterleri değiştirmek için yeterince basit olurdu, ama SQL içinde tamamen kalmak istiyorsanız ben size TRIM kullanabilirsiniz düşünüyorum. Bunun için sözdizimi gibi bir şey olurdu:

SELECT TRIM(TRAILING ',' FROM SUBSTRING_INDEX(text_field, ' ', 6)) FROM ...

Orada firar noktalama işareti kaldırmak için daha iyi bir seçenek olabilir - ama belki bu başka bir soru (ben hala TRIM daha iyi bir çözüm arıyorum) bulunuyor.

iyi sen substring fonksiyonunu kullanarak sorguda yapabilirdi

SELECT CONCATENATE(SUBSTRING(myfield, 0, N), "... see more") FROM mytable

bu sana ilk N harflerini alacak ...

Eğer gerçekten ilk N kelimeleri almak istiyorum ve "boşluklarla ayrılmış" gibi kelimeleri tanımlamak aşağıdaki gibi, yine sorguda bunu yapabilirdi

SELECT CONCATENATE(SUBSTRING_INDEX(myfield," ", N), "... see more") FROM mytable

Method 1 (Better):

Hayır, aynı zamanda alanında doğrudan istenen metni almak MySQL'in substring işlevini kullanabilirsiniz.

Prototype:

SUBSTRING(string,position)

Example:

SELECT SUBSTRING(field, 25) FROM table

Method 2:

Ayrıca aynı amaç için PHP'nin substr işlevini kullanabilirsiniz ama önce db bütün alan değeri seçmek zorunda kalacak.

$cutted = substr($row['fieldname'], 0, 25) . '.....'; // get 25 chars and append ....

In Your Case:

$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada.";
$parts = explode(" ", $str);
print $parts[0] . ' ' .$parts[1] . ' ' .$parts[2] . ' ' .$parts[3] . ' ' .$parts[4] . '.....See More';

Output:

Lorem ipsum dolor sit amet.....See More

Benim felsefem çok sert bir veritabanı çalışması kalmamasıdır. Bunu bir gerçek basit bir sorgu beslemek ve sonra PHP veya hangi dili kullandığınız ile "gerçek" iş yapmak benim deneyim, MySQL çok daha hızlıdır. Ben yayınlanan önerilerden birini takip etmem - bütün dize kapmak ve sonra betik dili veya seçim ile aşağı küçültmek. - Örneğin dize potansiyel çok büyük olabilir, eğer tek istisna olacaktır 50KB veya daha fazladır. Bu durumda, veritabanı sizin için küçültmek zorunda belki de daha hızlıdır. Saniyede bu sorguları binlerce yapıyoruz (ve eğer bunu yanlış yapıyoruz - önbelleğe çeşit kullanın) sürece Ama gerçekten, o zaman ben bir veritabanı için bu işi yapmak için herhangi bir sebep var sanmıyorum sen.

<?php 
    echo "<h3>".$this->consult['page_caption']."</h3>

        ";
    $txt=array();
    $txt = explode(" ",html_entity_decode($this->consult['page_content']));
    $record = array();
    $k =count($txt);

    for($x=0;$x<=30;$x++){
        if(  $x < $k){
            //if($txt
            $record[] = $txt[$x];
        }
    }

    $outdata =implode(" ",$record);
    echo "<p>".$outdata." <a href='#'> more&raquo;</a></p>";
    // html_entity_decode($this->consult['page_content'])
?>

Bu da yararlı olacağını düşünüyorum. Ben yazının ana sayfasına bir bağlantı ile üzerinde içeriğin bir kısmını almak için benim ana sayfada kullandı.

SELECT SUBSTRING(`Filed_Name`,1,X) FROM `Table` where field2 = 0

Tou görüntülemek için gereken karakterler tarafından substring fıkrasında X değiştirebilirsiniz.