Query next mysql record

0

Opa,

In a fetch_assoc query, I need to select the next record after an item

CREATE TABLE 'atividade_estudo_andamento_palavra' (
  'atividade_estudo_andamento_palavra_id' int(11) NOT NULL AUTO_INCREMENT,
  'atividade_estudo_andamento_palavra_aluno_id' int(11) DEFAULT NULL,
  'atividade_estudo_andamento_palavra_palavra_id' int(11) DEFAULT NULL,
  'atividade_estudo_andamento_palavra_data' datetime DEFAULT NULL,
  'atividade_estudo_andamento_palavra_ativo' int(11) DEFAULT NULL COMMENT '1=Concluido, 2=Pendente, 3=Andamento, 4=Revisao',
  PRIMARY KEY ('atividade_estudo_andamento_palavra_id')
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



SELECT
    atividade_estudo_andamento_palavra_palavra_id
FROM
    atividade_estudo_andamento_palavra
WHERE
    atividade_estudo_andamento_palavra_aluno_id = 14 and
    atividade_estudo_andamento_palavra_ativo = 3 and
    atividade_estudo_andamento_palavra_palavra_id <> 3
order by
    atividade_estudo_andamento_palavra_ativo DESC, atividade_estudo_andamento_palavra_data ASC, atividade_estudo_andamento_palavra_palavra_id ASC
limit 1

The value of study_activity_word_word_word_id is a variable.

The problem in question is that if there are 2 records in the table, select selects the other, but if there are more than 2, select returns to the next record it finds.

That is, if I have in activity_address_address_word_address_id records = 1, 2, 3, 4 or 5 when giving the select student_activity_address_word_address_id = 3, select returns 1 and should return 4.

sqlfiddle

    
asked by anonymous 30.09.2016 / 17:38

2 answers

0

according to your table:

  

CREATE TABLE atividade_estudo_andamento_palavra (% atividade_estudo_andamento_palavra_id int (11) NOT NULL   AUTO_INCREMENT, atividade_estudo_andamento_palavra_aluno_id   int (11) DEFAULT NULL,
atividade_estudo_andamento_palavra_palavra_id int (11) DEFAULT NULL,    atividade_estudo_andamento_palavra_data datetime DEFAULT NULL, atividade_estudo_andamento_palavra_ativo int (11) DEFAULT NULL   COMMENT '1 = Concluded, 2 = Pending, 3 = Progress, 4 = Review', PRIMARY   KEY ( atividade_estudo_andamento_palavra_id )) ENGINE = MyISAM   AUTO_INCREMENT = 45 DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

The query would be this one.

SELECT 
a.*,
(select atividade_estudo_andamento_palavra_data 
from atividade_estudo_andamento_palavra 
where atividade_estudo_andamento_palavra_aluno_id = 14 limit 1) as minhadata
from atividade_estudo_andamento_palavra a 
where 
a.atividade_estudo_andamento_palavra_data>minhadata 
limit 1;
    
30.09.2016 / 19:17
0

I would select the first record where the date is greater than the record where the word id equals 3 in ascending order.

SELECT *
FROM atividade_estudo_andamento_palavra
WHERE atividade_estudo_andamento_palavra_data > (SELECT
        atividade_estudo_andamento_palavra_data
    FROM
        atividade_estudo_andamento_palavra
    WHERE
        atividade_estudo_andamento_palavra_palavra_id = 3)
ORDER BY atividade_estudo_andamento_palavra_data ASC
LIMIT 1
    
30.09.2016 / 19:21