- Home
- Categorie
- Coding e Sistemistica
- PHP
- Paginazione dati con full text query e UNION
-
Paginazione dati con full text query e UNION
Ciao,
dovrei impaginare i dati in varie pagine ma ho questo problema. Eseguo 3 quesry che con UNION vado ad unire in questo modo:
$query = mysql_query("
(SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='1' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,3)
UNION
(SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='2' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,7)
UNION
(SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='3' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,1)
");Quindi mi trovo in difficoltà a paginare i dati con la clausola LIMIT perchè ognuna delle tre query ha dei LIMIT diversi. Conoscete un modo per farlo?
-
@balcazar said:
Ciao,
dovrei impaginare i dati in varie pagine ma ho questo problema. Eseguo 3 quesry che con UNION vado ad unire in questo modo:
$query = mysql_query("
(SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='1' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,3)
UNION
(SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='2' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,7)
UNION
(SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='3' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,1)
");Quindi mi trovo in difficoltà a paginare i dati con la clausola LIMIT perchè ognuna delle tre query ha dei LIMIT diversi. Conoscete un modo per farlo?
Premetto che non ho modo di provarlo e mysql non è il mio pane ma potresti avvolgere tutto in una tabella derivata:
select x.* from ( (SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='1' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,3) UNION (SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='2' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,7) UNION (SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE priority ='3' AND MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,1) ) x limit 0,10