Ben yeterince olgun değildir düşünüyorum çünkü ben MySQL depolanan yordamları kullanarak karşı genelde ama ben bu oluşturmak için klasik bir durum olduğunu düşünüyorum.
Biz hala iki sorgu, açıklamanın sipariş almak için bir tane ve ilgili satırları getiriliyor için bir tane olması gerekmektedir ancak sınır değerlerini çalıştırmadan önce bilinmesi gerekir beri ben 1 tek sorgu içinde başarmış için daha yaratıcı bir şey bulamadı sorgu.
Biz büyük sonuçlar setleri bahsetmiyoruz zaman durumlarda, o sadece tüm sonuçları ve yorumları sipariş alıp sonra sadece ilgili sayfa yorumları görüntülemek için array_slice kullanmak daha verimli olabilir.
/* get the comment order */
SET @commentOrder = 0;
SELECT commentOrder INTO @relevantCommentOrder FROM (
SELECT commentID, @commentOrder := @commentOrder+ 1 as commentOrder
FROM COMMENTS
ORDER BY creationDate) commentsOrder
WHERE commentID= 45;
/* get the value we want to use in the LIMIT clause */
SET @startFrom = CONVERT(ROUND(ROUND(@relevantCommentOrder/10)*10) ,UNSIGNED);
/* fetch relevant results */
PREPARE STMT FROM 'SELECT * FROM COMMENTS LIMIT ?,10';
EXECUTE STMT USING @startFrom;
Bir sonraki size ayarlanmış tüm sonuçlar almak ve all rows olarak açıklamanın emri vereceğini 1 sorgu yani sonra sadece PHP içindeki ilk satırın relevantCommentOrder alanını kontrol edin ve daha sonra görüntülemek istiyorum bu yüzden dizi doğrayabiliyordu ayarlanmış tüm sonuçlar çok büyük değilse sadece ilgili yorumlar, bu bir tek etkilidir.
SET @commentOrder = 0;
SELECT *, @relevantCommentOrder;
FROM (
SELECT commentID, @commentOrder := @commentOrder+ 1 as commentOrder,
@relevantCommentOrder := case when commentID = 45
then @commentOrder
else @relevantCommentOrder end
FROM COMMENTS
ORDER BY creationDate ) subQuery;