Для выбора определенной строки по ее номеру в наборе данных, вы можете использовать оператор `LIMIT` совместно с `OFFSET`. Например, если вы хотите выбрать 5-ю строку, ваш запрос будет выглядеть так:
```sql
SELECT * FROM ваша_таблица LIMIT 1 OFFSET 4;
```
- `LIMIT 1` - указывает на то, что нужно получить только одну строку.
- `OFFSET 4` - пропускает первые четыре строки, так что возвращается пятая.
Чтобы изменить запрос таким образом, чтобы в результаты попали только записи, где поле `spw1.workers` содержит значение `[40]`, а не `[170, 240]`, вы должны быть точнее в использовании оператора `LIKE`. Вместо `%40%` используйте более специфичное сравнение.
Допустим, `workerID` и `shop_id` - числа и вы хотите удостовериться, что `workers` содержит это число как отдельное значение в списке. Вы можете использовать `CONCAT` функцию для формирования точного шаблона:
```sql
WHERE spw1.type > 0 AND (spw1.workers LIKE CONCAT('%"', $arr['workerID'], '"%')
or spw1.workers LIKE CONCAT('%"', $_COOKIE['shop_id'], '"%'))
```
Обратите внимание: данный код подвержен SQL-инъекциям, поскольку он напрямую вставляет переменные (`$arr['workerID']` и `$_COOKIE['shop_id']`) в запрос. В production-коде вам следует использовать параметризированные запросы через `prepared statement` для защиты от таких угроз.
В зависимости от того, в каком виде хранятся данные в `workers`, вам возможно потребуется использовать другой подход, например, функции `JSON` если `workers` - это JSON-массив или регулярные выражения для более сложных случаев, однако в базовом случае - как предложено выше.