Witam,

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:
  1. 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:
  1. $elements = $pdo->query('SELECT * FROM `elements` WHERE `user_id` = 10')->fetchAll(PDO::FETCH_ASSOC);
  2.  
  3. $c = count($elements);
  4. for($i = 0; $i < $c; $i++) {
  5. $count = $pdo->query('SELECT count(*) FROM `elements` WHERE `id` > '.$elements[$i]['id'])->fetch(PDO::FETCH_NUM);
  6. $elements[$i]['count'] = $count[0];
  7. }


Jest możliwość zapisania tego w jednym zapytaniu?

@EDIT
Rozwiązane. Jeśli kogoś interesuje:

  1. SELECT `el1`.*, (SELECT count(*) FROM `elements` AS `el2` WHERE `el2`.`id` > `el1`.`id`) AS `after` FROM `elements` AS `el1` WHERE `user_id` = 10