Je serais surpris si vous ne voulez pas une commande. Comme vous l'avez, il est censé trouver un grand aléatoire, petit grand, et aléatoire 5 aléatoire.
Oui, vous pouvez utiliser UNION. Cependant, vous devrez exécuter un SQL. Regardez le journal pour le SQL pour chacune de vos trois requêtes, et exécutez un SQL d'une chaîne qui est chacune des trois requêtes avec UNION entre. Cela pourrait fonctionner, ou il pourrait avoir des problèmes avec la limite.
Il est possible en SQL en joignant la table à lui-même, en faisant un groupe par sur un des alias pour la table, un où où l'autre table est < = le groupe par table, et en ajoutant une clause having nombre de < = le tableau est sous la limite.
Donc, si vous aviez une simple requête de la table des postes (sans les conditions visibles et ping,) et je voulais les dossiers avec la dernière date de created_at, la requête normale serait:
SELECT posts1.*
FROM posts posts1, posts posts2
WHERE posts2.created_at >= posts1.create_at
AND posts1.overlay_type = 'normal'
AND posts2.overlay_type = 'normal'
GROUP BY posts1.id
HAVING count(posts2.id) <= 5
Prenez cette SQL, et ajoutez vos conditions pour visible et ping, en n'oubliant pas d'utiliser la condition pour les deux posts1 et posts2. Ensuite, écrivez les grandes et petites versions et combinez tous les éléments.
Je collerais avec les trois appels de base de données.
Merci pour la suggestion, je vais l'implémenter. Je vais attendre un peu avant d'accepter votre réponse, b/c je crois que c'est possible avec une requête sql personnalisée avec 'UNION'. – zevstatiev
Oui bien sûr, même si je voudrais apprendre une nouvelle chose :) – Salil