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 >= && $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 >= && $num_promoter >= && $num_opportunities >= && $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