내 질문에 직접적으로 답하는 해결책을 찾을 수 있는지 살펴 보았지만 찾을 수없는 것 같습니다.SQL 쿼리에서 처음 160자를 얻고 HTML을 제거하려면 어떻게합니까?
내 기존 DB를 쿼리하고 새 DB로 가져올 수있는 새 테이블을 만듭니다. news_releases_body
에서 파생 된 news_releases_summary
이라는 새 필드를 만들고 싶지만 처음 160 자 (SEO 메타 desc)와 이상적인 HTML은 없습니다.
현재 검색어는 다음과 같습니다. 문제가있는 기능은 LTRIM입니다. RTRIM -이 작업에 적합한 기능인지는 확실하지 않습니다. *이 작업을 수행하지 않으면 최종 출력물이 JSON으로 확인되지 않으므로 \ n \ t도 제거해야합니다.
SELECT
FROM_UNIXTIME(exp_channel_titles.entry_date,'%m/%e/%Y %h:%i %p') AS entry_date,
exp_channel_titles.status,
exp_channel_titles.title,
exp_channel_data.field_id_66 AS news_releases_subtitle,
exp_channel_data.field_id_65 AS news_releases_contact,
REPLACE(replace(exp_channel_data.field_id_67,char(10),''),char(13),'') AS news_releases_body
LTRIM(RTRIM(REPLACE(replace(exp_channel_data.field_id_67,char(10),''),char(13),''))) AS news_releases_summary
FROM exp_channel_data INNER JOIN exp_channel_titles
ON exp_channel_data.entry_id = exp_channel_titles.entry_id
WHERE exp_channel_data.channel_id = '21'
ORDER BY exp_channel_titles.entry_date
UPDATE
내가 지금 생각하는 곳이다, 그러나 나는 "존재하지 않는 기능의 ee_2.strip_tags"오류를 받고 있어요. strip_tags 함수를 쿼리에 직접 포함시켜야합니까? 나는 Mac에서 Sequel Pro를 사용하고 있습니다.
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
DECLARE $start, $end INT DEFAULT 1;
LOOP
SET $start = LOCATE("<", $str, $start);
IF (!$start) THEN RETURN $str; END IF;
SET $end = LOCATE(">", $str, $start);
IF (!$end) THEN SET $end = $start; END IF;
SET $str = INSERT($str, $start, $end - $start + 1, "");
END LOOP;
END;
SELECT
FROM_UNIXTIME(exp_channel_titles.entry_date,'%m/%e/%Y %h:%i %p') AS entry_date,
exp_channel_titles.status,
exp_channel_titles.title,
exp_channel_data.field_id_66 AS news_releases_subtitle,
exp_channel_data.field_id_65 AS news_releases_contact,
REPLACE(REPLACE(exp_channel_data.field_id_67,char(10),''),char(13),'') AS news_releases_body,
LEFT(strip_tags(REPLACE(REPLACE(exp_channel_data.field_id_67,char(10),''),char(13),'')),160) AS news_releases_summary
FROM exp_channel_data INNER JOIN exp_channel_titles
ON exp_channel_data.entry_id = exp_channel_titles.entry_id
WHERE exp_channel_data.channel_id = '21'
ORDER BY exp_channel_titles.entry_date
RDBMS를 사용하고 계십니까? – ninesided
Mac에서 Sequel Pro를 사용하고 있습니다 –
작동하지 않는 쿼리의 유일한 부분은 LTRIM –