проблема предела объединения mysql - PullRequest
5 голосов
/ 08 декабря 2010

Я хочу, чтобы пейджинговый скрипт работал нормально, но ситуация немного сложная. Мне нужно выбрать данные из объединения двух запросов SQL. Смотрите запрос ниже. У меня есть настольная книга и настольный книжный шкаф. Я хочу показать все книги определенной категории в порядке их популярности. Я получаю данные для всех книг по крайней мере за одно посещение, присоединяясь к таблице book и bookvisit. и затем объедините это со всеми книгами без посещения. Все работает нормально, но когда я пытаюсь сделать пейджинг, мне нужно ограничить его как (0,10) (10,10) (20,10) (30,10), правильно? Если у меня 9 книг в этой книге и 3761 книга без посещения этой категории (всего 3770 книг), то должно быть 377 страниц, по 10 книг на каждой странице. но он не показывает никаких данных для некоторых страниц, потому что он пытается показать книги с ограничением 3760,10 и, следовательно, нет записей для второго запроса в объединении. Может быть, я не могу прояснить ситуацию здесь, но если вы немного подумаете о ситуации, вы поймете мою точку зрения.

SELECT * FROM ( 
SELECT * FROM (
 SELECT viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
 INNER JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
 ORDER BY viewcount DESC 
 LIMIT 10, 10
 ) AS t1 
 UNION 
 SELECT * FROM 
 ( 
 SELECT   viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
 LEFT JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
 AND viewcount IS NULL 
 ORDER BY viewcount DESC 
 LIMIT 10, 10
  ) AS t2 
  ) 
  AS qry
   ORDER BY viewcount DESC 
LIMIT 10

1 Ответ

3 голосов
/ 08 декабря 2010

Не используйте лимит для отдельных запросов.Используйте лимит только в конце.Вы хотите получить набор результатов дырки из 2 запросов, а затем показать только 10 результатов, которые вам нужны, независимо от того, является ли это LIMIT 0, 10 или LIMIT 3760,10

SELECT * FROM (  
 SELECT * FROM (  
  SELECT viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
  INNER JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
  ORDER BY viewcount DESC   
 ) AS t1   
 UNION   
 SELECT * FROM  
 (   
  SELECT   viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
  LEFT JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
  AND viewcount IS NULL   
  ORDER BY viewcount DESC   
 ) AS t2   
)   
 AS qry  
ORDER BY viewcount DESC   
LIMIT 10, 10
...