Если вы хотите получить список, подобный этому
Page 1
----------------------
1 JOE HONDA 123
1 JOE TOYOTA 124
Page 2
----------------------
2 MAC VW 125
2 MAC HONDA 126
2 MAC TESLA 127
Page 3
----------------------
3 STU SUBARU 128
3 STU KIA 129
Забудьте о лимите, сделайте это вместо этого:
A - Сначала получите список идентификаторов пользователя и вставьте его во временную папку.table
CREATE TEMPORARY TABLE `test`.`temp_user_ids` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE = MEMORY
B - Затем вставьте соответствующие релевантные user_id в таблицу.
INSERT INTO temp_user_ids
SELECT null, user_id
FROM user_profiles
LEFT JOIN cars
ON cars.id_fk = user_id
WHERE user_id NOT LIKE '$id'
AND activated = 1
AND banned = 0
AND first_name LIKE '%$search_term%'
ORDER BY user_id DESC /*insert in reverse order !*/
Самый низкий user_id - это last_insert_id в temptable, а элементы temp_table расположены в последовательном порядке.
C - Установите для SQL @var @current_id значение last_insert_id в таблице temp_table.
SELECT @current_id:= LAST_INSERT_ID()
D - Затем выберите соответствующие строки из таблицы, используя только нужный идентификатор пользователя.
SELECT count(*) as row_count,
up.user_id,
first_name,
group_concat(cars_name) as car_names,
group_concat(cars_id) as car_ids,
FROM user_profiles up
LEFT JOIN cars
ON cars.id_fk = up.user_id
INNER JOIN temp_user_ids t
ON (t.user_id = up.user_id)
WHERE t.id = @current_id
GROUP BY up.user_id
ORDER BY cars.id
E - Теперь опустите @ current_id
SELECT @current_id:= @current_id - 1;
F - И повторяйте шаги D и E до тех пор, пока не останется больше строк.
Первое поле row_count
сообщает количество строк, агрегированных в полях
car_names
и car_ids
.Вы можете разделить эти поля, используя php explode
.