从MySQL Blob字段中选择一个部分

时间:2012-02-06 01:09:45

标签: php mysql sql

我有一个包含大量数据的表,其中一个是blob。我有时需要使用PHP来查看这个blob数据。

我做:

select `desc` from table where `desc` like '%Nam rhoncus%';

这会返回整个数据,但我不需要它

所以,如果我的描述是这样的:

  

Lorem ipsum dolor坐下来,精神上的精神。在一个临时的   velit。整数坐在nibh nibh,eu rutrum ante。 Mauris cursus,   neque eu ultrices pulvinar,purus purus fermentum libero,in eleifend   tortor orci quis lectus。 Cras luctus nunc ac tortor laoreet eu iaculis   libero consectetur。 Maecenas iaculis facilisis libero sodales auctor。   Donec gravida interdum vehicula。 Suspendisse vitae massa eget arcu   调味品马蒂尼斯。 Fusce ut ligula ante,nec placerat felis。保护者   vel nunc nibh,ut luctus urna。 Nunc eu lectus a orci iaculis volutpat   eget a lorem。 Nunc lobortis porttitor tempor。 Nulla ipsum neque,   在viverra的volutpat坐在amet,pharetra non tortor。在狮子座的Phasellus   pellentesque nunc ultrices euismod。

     

Nulla ullamcorper scelerisque leo,eu consequat risus fringilla id。   Nulla facilisi。 Cras坐在一个直径的molestie dignissim。 DUIS   interdum,sapien quis laoreet bibendum,dui turpis imperdiet magna,id   auctor metus velit sollicitudin dolor。整数blandit,turpis eget   interdum commodo,ante nisl laoreet dui,ac congue purus dui quis   nisl。在egestas的Etiam blandit eleifend tortor。 Vestibulum euismod   orci ac nibh consectetur feugiat。 Praesent ac libero quam。 Morbi elit   nulla,gravida ac blandit eu,bibendum vitae lacus。在facilisis   pellentesque ipsum aliquam auctor。 Nam rhoncus,purus eget fringilla   ullamcorper,mauris tellus fermentum lectus,ut tempus tellus arcu vel   悲。 Suspendisse eros augue,tincidunt sit amet luctus et,auctor id   turpis。 Praesent consequat velit ut arcu convallis sodales。 PROIN   pulvinar varius erat,id consequat orci varius sed。

我正在寻找:Nam rhoncus我希望第一次出现:

...m auctor. Nam rhoncus, purus eg...

2 个答案:

答案 0 :(得分:15)

此查询:

SELECT 
  CONCAT(
    '...', 
    SUBSTR(`description`, 
      LOCATE('Nam rhoncus', `description`) - 10, 
      (LENGTH('Nam rhoncus') + 20)), 
    '...') AS `description`
FROM table 
WHERE `description` LIKE '%Nam rhoncus%';

(我把它分解成这样,因此更容易阅读)

这将输出:

...m auctor. Nam rhoncus, purus eg...

所以在PHP中你可以这样做:

<?php
define('CHAR_LEFT', 10);
define('CHAR_RIGHT', 10);
// db stuff
$search = mysql_real_escape_string($search_var);
$query = "SELECT CONCAT('...', SUBSTR(`description`, LOCATE('" . $search . "', `description`) - " . CHAR_LEFT . ", (LENGTH('" . $search . "') + " . (CHAR_LEFT + CHAR_RIGHT) . ")), '...') AS `description` FROM table WHERE `description` LIKE '%" . $search . "%';";
// then your request

注意:请小心使用mysql反向词,这就是我使用description的原因。

答案 1 :(得分:0)

以下内容应该满足您的需求:

SELECT
    SUBSTR(description, INSTR(description, 'Nam rhoncus'), LENGTH('Nam rhoncus')) matchStr
FROM
    testTable
WHERE
    description like '%Nam rhoncus%'
;