2013-07-25 3 views
0

Mes excuses à l'avance si cela ne semble pas être une bonne question de SO. Cependant, je ne peux pas trouver la réponse ailleurs. Je veux être capable de trier les résultats par un algorithme qui classe les résultats en fonction de différentes colonnes ou variables en utilisant une règle. Mon intuition est que l'utilisation de MYSQL ORDER BY intégré est beaucoup plus rapide que la manipulation de la collection d'enregistrements une fois qu'elle est retournée. J'ai utilisé des index dans MYSQL pour accélérer le tri sur un champ ou alternativement deux champs. Mais je ne sais pas comment créer une règle ou une formule qui pondère deux champs et hiérarchise et impose une logique sur les poids.PHP/MYSQL Créer un schéma de données d'algorithme de tri

Par exemple: Dire que j'ai un tableau de commentaires. Je voudrais créer un algorithme qui trie ces avis sur la base de la pondération combinée de différentes variables avec un peu de logique lancée.

Comme dans l'exemple: Les résultats sont édités aujourd'hui en premier. Avec tous les autres résultats, retour basé sur 50% sur la réputation de l'auteur et 50% sur la création de l'avis .

Tableau Avis:

id|reviewtext|lastedited|datecreated|authorid 

Tableau auteurs

id|name|reputation 

MYSQL/PHP:

$SQL = "SELECT r.*, a.* FROM `reviews` r 
LEFT JOIN `authors` a 
on = r.authorid= a.id 
WHERE reviewtext LIKE '%str%' 
ORDER BY lastedited DESC datecreated DESC reputation DESC"; 

ordonnerait d'abord par lastedited, puis par dateCreated etc.

Comment faire J'utilise une formule plus compliquée avec des poids logiques, etc.?

Merci d'avance pour toute suggestion.

Répondre

1

Vous pouvez utiliser des expressions dans votre clause ORDER BY -

SELECT r.*, a.* 
FROM reviews r 
INNER JOIN authors a 
    ON r.authorid = a.id 
WHERE reviewtext LIKE '%str%' 
ORDER BY 
    IF(lastedited >= CURRENT_DATE, lastedited, '0000-00-00') DESC, 
    (SOME EXPRESSION EVALUATING DATE AND REPUTATION) DESC 
Questions connexes