Mam problem. Muszę pobrać w jednym zapytaniu wszystkie rekordy spełniające dany warunek i liczbę rekordów znajdujących się po nich. Nie mogę po indeksie, ponieważ rekordy mogą być usunięte po drodze = luka pomiędzy kolejnymi ID.
w SQL napisałbym to jakoś tak:
SELECT `elements`.*, (SELECT count(*) FROM `elements` WHERE `elements`.`id` > `elements`.`id`) AS `after` FROM `elements` WHERE `user_id` = 10
niestety, jak widać, w podzapytaniu używam dwa razy `elements`.`id` - jednego z podzapytania a drugiego z zapytania głównego, więc nie działa ;/
mógłbym ewentualnie napisać to w PHP z dodatkowym zapytaniem dla każdego elementu:
$elements = $pdo->query('SELECT * FROM `elements` WHERE `user_id` = 10')->fetchAll(PDO::FETCH_ASSOC); for($i = 0; $i < $c; $i++) { $count = $pdo->query('SELECT count(*) FROM `elements` WHERE `id` > '.$elements[$i]['id'])->fetch(PDO::FETCH_NUM); $elements[$i]['count'] = $count[0]; }
Jest możliwość zapisania tego w jednym zapytaniu?
@EDIT
Rozwiązane. Jeśli kogoś interesuje:
SELECT `el1`.*, (SELECT count(*) FROM `elements` AS `el2` WHERE `el2`.`id` > `el1`.`id`) AS `after` FROM `elements` AS `el1` WHERE `user_id` = 10