Consider the following query-
SELECT * FROM GAME_LIST WHERE
genre = (SELECT Genre FROM GAME_LIST WHERE name='$searchTerm') OR
publisher = (SELECT Publisher FROM GAME_LIST WHERE name='$searchTerm')
ORDER BY CASE WHEN name LIKE '%$searchTerm%' then 1 else 2 end, points DESC
This query will generate number of rows from GAME_LIST
table. For example-
A - 123 - W
B - 235 - R
C - 323 - R
D - 146 - R
E - 167 - W
F - 189 - W
G - 165 - R
But I don't want to include the first row (in this case A - 123 - W
).
How can I achieve this within my existing query?
Use the offset
capability of limit
. In MySQL, this would often be written as:
ORDER BY CASE WHEN name LIKE '%$searchTerm%' then 1 else 2 end, points DESC
LIMIT 1, 9999999
The second argument is just a big number to be sure you get all the rows you want.
This can also be written as:
LIMIT 99999999 OFFSET 1
The OFFSET
counting starts at 0
for the first row, so 1
skips the first row, starting at the second.
Use the following:
SELECT * FROM GAME_LIST WHERE
genre = (SELECT Genre FROM GAME_LIST WHERE name='$searchTerm') OR
publisher = (SELECT Publisher FROM GAME_LIST WHERE name='$searchTerm')
ORDER BY CASE WHEN name LIKE '%$searchTerm%' then 1 else 2 end, points DESC
LIMIT 2, ( SELECT * FROM GAME_LIST WHERE
genre = (SELECT Genre FROM GAME_LIST WHERE name='$searchTerm') OR
publisher = (SELECT Publisher FROM GAME_LIST WHERE name='$searchTerm'))