• User

    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?


  • User Attivo

    @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