8
votes

Y a-t-il une solution de contournement pour utiliser la limite dans une sous-requête dans MySQL?

Voici ma requête d'origine ... xxx pré>

La limite code> code> est pour la pagination. P>

Maintenant, je dois tout faire comme avant, mais j'ai besoin d'obtenir seulement un tiers des rangées où une condition est présente. p>

Je suis venu avec cela, je viens de lancer limite 30 code> avant que je puisse comprendre comment DO (Total des lignes correspondues / 3) * 2. P>

SELECT `id`
  FROM `properties`
 WHERE `id` NOT IN (SELECT `id` 
                      FROM `properties` 
                     WHERE `vendor` = "abc" 
                  ORDER BY RAND() 
                     LIMIT 30)
LIMIT 10, 20    


2 commentaires

Une chose évidente qui ressort à l'esprit est que résultats aléatoires et pagination ne vont pas vraiment ensemble ...


@Deceze ouais, je pensais que lorsque vous le faites dans PHP. Donc, je viens de prendre le premier 1/3.


3 Réponses :


1
votes

mySQL prend la limite de support dans une sous-requête ... mais MySQL ne prend pas en charge en utilisant / non dans une sous-requête.

Pour être honnête, je ne sais vraiment pas ce que vous essayez d'accomplir.


1 commentaires

Juste une demande étrange par un client - "Je veux montrer toutes les propriétés, mais seulement une 1/3 aléatoire par un fournisseur spécifique".



4
votes

Si votre version de MySQL ne prend pas en charge cela, vous avez 2 options:

  • Mise à niveau. Toujours amusant, et il est généralement préférable d'être sur la dernière version.
  • rompre votre sous-requête en utilisant php. Prenez l'IDS, puis formatez les résultats dans une chaîne séparée par des virgules.

1 commentaires

Sur un hôte partagé, alors ne pouvez pas mettre à niveau. Cependant, je l'ai fait dans PHP. :) Merci pour votre réponse.



16
votes

Désolé je suis en retard, cela a fonctionné pour moi: xxx


1 commentaires

Merci omg poneys, l'a déjà fait dans PHP mais j'apprendrai quelque chose de cela. +1