I am trying to select the record but not getting the record I wanted. here is my sqlfiddle http://sqlfiddle.com/#!17/5296a/1
so when I selects the record using below query
select title from post where (id>3 and author_id=3) or id>3 limit 1
it gives me result with the title DDDDD
. it should give me GGGGGGGG
.
I wanted to check if there is any record with author_id=3
and greater than the post id=3
if not then just get the any post id greater than 3.
I am not sure what I am missing here.
Advertisement
Answer
I wanted to check if there is any record with author_id=3 and greater than the post id=3 if not then just get the any post id greater than 3.
From what you describe, you want:
select title from post where id > 3 order by (author_id = 3) desc limit 1;
Here is a db<>fiddle. This filters all the rows so there is just id > 3
. The order by
puts any rows with author_id = 3
first, so the limit
would return that one.
Your version just returns an arbitrary row that matches the where
condition — and that condition is equivalent to where id > 3
. The where
conditions don’t provide any sort of “preference”. They just specify whether or not a given row is in the result set.