Вытяните первые X слова (не только символы) из mySQL
Я хотел бы иметь возможность вытащить первые X слова из поля базы данных для использования в предварительном просмотре. В основном, если содержимое поля было
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada."
Я хотел бы эхо
"Lorem ipsum dolor sit amet... see more"
Какой лучший способ сделать это?
Единственное, что я знаю, - это вытащить все поле в запросе, а затем сделать что-то вроде
$foo = [query_results];
$bar = explode(' ', $foo);
for($x=0, $x<6, $x++){
echo $bar[$x];
};
echo "... see more"
Есть ли лучший подход к этому?
Ответы
Ответ 1
Вы определенно хотите использовать SUBSTRING_INDEX, который вернет некоторое количество символов, пока не будет достигнут определенный счет, основанный на появлении разделителя. В вашем случае вызов будет выглядеть так:
SELECT SUBSTRING_INDEX(text_field, ' ', 6) FROM ...
В частности, это вернет до шести слов , где мы определяем слово как набор символов, которые не являются пробелами, разделенными пробелами.
Примечание: это приведет к препинанию, привязанной к последнему слову, что может быть или не быть желательным. Было бы достаточно просто заменить любые символы пунктуации в хвосте строки в PHP, но если вы хотите полностью остаться в SQL, я думаю, вы можете использовать TRIM. Синтаксис для этого будет примерно таким:
SELECT TRIM(TRAILING ',' FROM SUBSTRING_INDEX(text_field, ' ', 6)) FROM ...
Может быть лучший вариант для удаления завершающей пунктуации - но, возможно, этот еще один вопрос (я все еще ищу лучшее решение, чем TRIM).
Ответ 2
ну, вы можете сделать это в своем запросе, используя функцию подстроки
SELECT CONCATENATE(SUBSTRING(myfield, 0, N), "... see more") FROM mytable
который даст вам первые N букв...
если вы действительно хотите получить первые N слов, и вы определяете слова как "ограниченные пробелами", вы все равно можете сделать это в запросе следующим образом
SELECT CONCATENATE(SUBSTRING_INDEX(myfield," ", N), "... see more") FROM mytable
Ответ 3
Метод 1 (лучше):
Нет, вы также можете использовать подстроку функцию mysql для извлечения нужного текста непосредственно из поля.
Прототип:
SUBSTRING(string,position)
Пример:
SELECT SUBSTRING(field, 25) FROM table
Метод 2:
Вы также можете использовать функцию PHP substr
для этой же цели, но сначала вам нужно будет выбрать целое значение поля из db.
$cutted = substr($row['fieldname'], 0, 25) . '.....'; // get 25 chars and append ....
В вашем случае:
$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';
Вывод:
Lorem ipsum dolor sit amet.....See More
Ответ 4
SELECT SUBSTRING(`Filed_Name`,1,X) FROM `Table` where field2 = 0
Вы можете заменить X в выражении подстановки символами, которые вам нужно отобразить.
Ответ 5
Моя философия такова: не делайте эту работу слишком сложной. По моему опыту, MySQL намного быстрее, когда вы кормите его реальным простым запросом, а затем выполняете "настоящую" работу с PHP или любым другим языком, который вы используете. Я не буду следовать ни одному из предложенных предложений - хватайте всю строку, а затем сократите ее с помощью языка сценариев или выбора. Единственное исключение было бы, если бы строка могла быть очень большой - например, 50 КБ или более. В этом случае наличие базы данных сократится, возможно, быстрее. Но действительно, если вы не делаете тысячи этих запросов в секунду (и если вы ошибаетесь, используйте какое-то кеширование), то я не думаю, что есть основания для того, чтобы база данных выполняла эту работу для вы.
Ответ 6
<?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»</a></p>";
// html_entity_decode($this->consult['page_content'])
?>
Думаю, это тоже будет полезно. Я использовал его на моей индексной странице, чтобы получить часть содержимого на нем со ссылкой на главную страницу статьи.