Re: display neighboring records? -
06-04-2007, 07:58 AM
tonyberber a écrit :
> My database looks like this:
>
> mysql> describe corpus;
> +-------+-------------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +-------+-------------+------+-----+---------+----------------+
> | ID | int(11) | NO | PRI | NULL | auto_increment |
> | word | varchar(20) | YES | | NULL | |
> | tag | varchar(20) | YES | | NULL | |
> | lemma | varchar(20) | YES | | NULL | |
> +-------+-------------+------+-----+---------+----------------+
>
> Here's a section of it:
>
> | 11298 | de | NP | de |
> | 11299 | t?tulos | NP | <unknown> |
> | 11300 | e | SYM | e |
> | 11301 | documentos | NNS | <unknown> |
> | 11302 | . | SENT | . |
> | 11303 | ? | SYM | ? |
> | 11304 | 2? | JJ | <unknown> |
> | 11305 | A | DT | a |
> | 11306 | conven??o | NN | <unknown> |
> | 11307 | somente | NN | <unknown> |
> | 11308 | obrigar? | NP | <unknown> |
> | 11309 | os | NN | os |
> | 11310 | filiados | NN | <unknown> |
> | 11311 | ?s | NNS | <unknown> |
> | 11312 | entidades | NNS | <unknown> |
> | 11313 | signat?rias | NNS | <unknown> |
> | 11314 | . | SENT | . |
> | 11315 | ? | SYM | ? |
> | 11316 | 3? | JJ | <unknown> |
> | 11317 | N?o | NP | <unknown> |
> | 11318 | se | FW | se |
> | 11319 | exime | NP | <unknown> |
> | 11320 | de | FW | de |
> | 11321 | cumprir | NN | <unknown> |
> | 11322 | a | DT | a |
> | 11323 | conven??o | NN | <unknown> |
> | 11324 | o | NN | o |
> | 11325 | fornecedor | NN | <unknown> |
> | 11326 | que | NP | que |
> | 11327 | se | FW | se |
> | 11328 | desligar | NP | <unknown> |
> | 11329 | da | NP | da |
> | 11330 | entidade | NN | <unknown> |
> | 11331 | em | NN | em |
> | 11332 | data | NNS | datum |
> | 11333 | posterior | JJ | posterior |
> | 11334 | ao | NN | <unknown> |
> | 11335 | registro | NN | <unknown> |
> | 11336 | do | VVP | do |
> | 11337 | instrumento | NN | <unknown> |
> | 11338 | . | SENT | . |
>
>
> I would like to search for word and for each word display word
> together with its 10 previous and its 10 subsequent records.
>
> For example, if word='de', a search in the previous section should
> return (lines added between hits):
>
> ------------------
> | 11298 | de | NP | de |
> | 11299 | t?tulos | NP | <unknown> |
> | 11300 | e | SYM | e |
> | 11301 | documentos | NNS | <unknown> |
> | 11302 | . | SENT | . |
> | 11303 | ? | SYM | ? |
> | 11304 | 2? | JJ | <unknown> |
> | 11305 | A | DT | a |
> | 11306 | conven??o | NN | <unknown> |
> | 11307 | somente | NN | <unknown> |
> ------------------
> | 11310 | filiados | NN | <unknown> |
> | 11311 | ?s | NNS | <unknown> |
> | 11312 | entidades | NNS | <unknown> |
> | 11313 | signat?rias | NNS | <unknown> |
> | 11314 | . | SENT | . |
> | 11315 | ? | SYM | ? |
> | 11316 | 3? | JJ | <unknown> |
> | 11317 | N?o | NP | <unknown> |
> | 11318 | se | FW | se |
> | 11319 | exime | NP | <unknown> |
> | 11320 | de | FW | de |
> | 11321 | cumprir | NN | <unknown> |
> | 11322 | a | DT | a |
> | 11323 | conven??o | NN | <unknown> |
> | 11324 | o | NN | o |
> | 11325 | fornecedor | NN | <unknown> |
> | 11326 | que | NP | que |
> | 11327 | se | FW | se |
> | 11328 | desligar | NP | <unknown> |
> | 11329 | da | NP | da |
> | 11330 | entidade | NN | <unknown> |
> ---------------------
>
> Thanks ahead for any help.
>
> bye
> tony
>
try this:
select T.*
from T
inner join
(
select t2.id
from T t1
inner join T t2
on t1.word = 'de' <- what you search
and t2.id between (t1.id - 9) and (t1.id + 9)
group by t2.id
) X
on T.id = X.id