- Home
- Categorie
- Coding e Sistemistica
- PHP
- Ricerca Full Text con vincoli
-
Ricerca Full Text con vincoli
Ciao a tutti,
ho un problema con la ricerca in un db mysql.
Ho una tabella che contiene i records ed un campo priorità che ha valore 1,2 o 3 dove 1 è il più importante.
Ora imposto la ricerca full text e lui mi restituisce i risultati corretti. Però vorrei poter "manipolare" questi risultati con il campo priorità e rendere più importanti i risultati che hanno priorità 1 di quelli che hanno priorità 3.
In modo da ottenere il seguente output
1 risultato priorità 1
10 risultati priorità 2
3 risultati priorità 3C'è modo di farlo senza fare 3 query al database?
Grazie
-
[php]
SELECTpriorita
, COUNT(priorita
)
FROMbanca
GROUP BYpriorita
ORDER BYpriorita
[/php]restituisce una tabella formata da un campo priorita e un campo contenente il numero di record che hanno qulla priorita..:)..CIAO
-
Ciao e grazie per la risposta
ma... io dovrei avere sia i risultati in priorità 1 che quelli in 2 che quelli in 3 nei risultati della ricerca.
questa è la mia query:
SELECT *, MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') AS attinenza FROM records WHERE MATCH(url,titolo,descrizione,parolechiave) AGAINST('$q') ORDER BY attinenza DESC LIMIT 0,10
In pratica vorrei fare qs:
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,1
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,10
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,3
il tutto in un unica query.
-
mmm..dovresti usare la UNION..
[PHP]
( 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,1 )
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,10 )
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,3 )
[/PHP]in questo modo unisci i risultati di tre query iverse in una sola..
-
grazie così funziona!!!
-
prego..:)..ciao