Salve a tutti, sto realizzando un sistema di ricerca che funzioni in maniera simile a quello di Facebook.
Nel mio sito ho 4 categorie di contenuti e ho preparato un form di ricerca in ajax con suggerimento.
Il risultato che vorrei è che i suggerimenti non fossero mai più di 8 e che i contenuti fossero equamente proposti a chi effettua la ricerca:
CATEGORIA1
-Contenuto 1x
-Contenuto 1Y
CATEGORIA2
-Contenuto 2x
-Contenuto 2y
CATEGORIA3
-Contenuto 3x
-Contenuto 3y
CATEGORIA4
-Contenuto 4x
-Contenuto 4y
Ovviamente il problema nasce quando una delle categorie ha meno di due risultati.
ipotizziamo che la categoria due abbia solo un risultato, la situazione dovrebbe essere questa:
CATEGORIA1
-Contenuto 1x
-Contenuto 1Y
-Contenuto 1z
CATEGORIA2
-Contenuto 2x
CATEGORIA3
-Contenuto 3x
-Contenuto 3y
CATEGORIA4
-Contenuto 4x
-Contenuto 4y
Quello che io ho pensato di fare, vista la complessità delle select necessarie per ottenere i vari tipi di contenuto (utilizzo Drupal come CMS) è stato:
- fare 4 select con limit 8
- contare i risultati di ogni select
- con un sistema di IF, decidere quanti risultati stampare per ogni select, in base ai risultati delle altre (IL PROBLEMA STA QUI)
- stampare i risultati con 4 cicli while limitati dai risultati del sistema del punto precedente
qui posto una porzione di codice funzionante nel medesimo caso, ma in presenza di sole due categorie...
Codice PHP:
<?php
//$num_promoter = COUNT della prima SELECT
//$num_user = COUNT della seconda SELECT
if($num_promoter+$num_user <= 8){} else { //tutti i casi in cui la somma sia maggiore di 8
if($num_user >= 4 && $num_promoter >= 4){
$num_user = 4;
$num_promoter = 4;
} elseif($num_user < 4){ //se gli UTENTI sono minori di 4
if($num_promoter > 5){
$num_promoter = 8-$num_user;
}
} elseif($num_promoter < 4){//se i PROMOTER sono minori di 4
if($num_user > 5){
$num_user = 8-$num_promoter;
}
}
}
?>
Questo invece è quello che ho prodotto nel casi di 4 categorie (ovviamente non funziona benissimo)
Codice PHP:
if($num_promoter+$num_user+$num_opportunities+$num_events <= 8){} else { //tutti i casi in cui la somma sia maggiore di 8
if($num_user >= 2 && $num_promoter >= 2 && $num_opportunities >= 2 && $num_events >= 2){
$num_user = 2;
$num_promoter = 2;
$num_opportunities = 2;
$num_events = 2;
} elseif($num_user < 2){ //se gli UTENTI sono minori di 2
if($num_promoter+$num_opportunities+$num_events <= 8-$num_user){} else {
if($num_opportunities < 3){
if($num_events < 4){
$num_promoter = 8-$num_events-$num_opportunities-$num_user;
}
}
}
} elseif($num_opportunities < 2){ //se le OPPORTUNITA' sono minori di 2
if($num_promoter+$num_user+$num_events <= 8-$num_opportunities){} else {
if($num_user < 3){
if($num_events < 4){
$num_promoter = 8-$num_events-$num_opportunities-$num_user;
}
}
}
} elseif($num_events < 2){ //se gli EVENTI sono minori di 2
if($num_promoter+$num_user+$num_opportunities <= 8-$num_events){} else {
if($num_user < 3){
if($num_opportunities < 4){
$num_promoter = 8-$num_opportunities-$num_events-$num_user;
}
}
}
} elseif($num_promoter < 2){ //se i PROMOTER sono minori di 2
if($num_events+$num_user+$num_opportunities <= 8-$num_promoter){} else {
if($num_user < 3){
if($num_opportunities < 4){
$num_events = 8-$num_opportunities-$num_promoter-$num_user;
}
}
}
}
}
Mi servirebbe un consiglio per sapere se sto seguendo la strada giusta (è la prima volta che faccio una cosa del genere) o se esiste una soluzione migliore.
Spero di essermi spiegato bene, grazie a chiunque abbia la pazienza di leggere tutta la mia richiesta