2010-10-21 27 views
7

Aquí es mi búsqueda original ...¿Hay alguna solución para usar LIMIT en una subconsulta en MySQL?

SELECT `id` 
    FROM `properties` 
LIMIT 10, 20 

La condición LIMIT es para paginación.

Ahora, tengo que obtener todo como antes, pero necesito obtener solo un tercio de las filas donde hay una condición presente.

me ocurrió esto, simplemente tirar LIMIT 30 antes me di cuenta de cómo hacerlo (filas Total emparejado/3) * 2.

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

MySQL dijo ...

1235 - Esta versión de MySQL todavía no soporta 'LÍMITE EN &/ALL/ANY/SOME subconsulta'

supongo que no puedo usar LIMIT en una subconsulta.

Así que esto no es una cuestión de varios, pero todos relacionados ...

  • es una solución para LIMIT en subconsulta?
  • ¿Puedo seleccionar un 1/3 de las filas coincidentes con MySQL?
  • ¿Debo convertir esto en 2 consultas, o simplemente seleccionar todas y deshacer las filas no necesarias en PHP?
+1

Una cosa obvio que viene a la mente es que * * resultados al azar y paginación * * realmente no van de la mano ... – deceze

+0

@deceze Sí, pensé que al hacerlo en PHP. Así que acabo de tomar el primer 1/3. – alex

Respuesta

4

Si su versión de MySQL no soporta que entonces usted tiene 2 opciones:

  • de actualización. Siempre es divertido, y generalmente es mejor estar en la última versión.
  • Desarrolla tu subconsulta usando php. Coge los ID, luego formatea los resultados en una cadena separada por comas.
+0

En un host compartido, no se puede actualizar. Sin embargo, lo hice en PHP. :) Gracias por tu respuesta. – alex

1

MySQL admite LIMIT en una subconsulta ... pero MySQL NO admite el uso de IN/NOT IN con una subconsulta.

Para ser honesto, realmente no sé lo que estás tratando de lograr.

+0

Simplemente una solicitud extraña de un cliente: "Quiero mostrar todas las propiedades, pero solo un 1/3 aleatorio de un proveedor específico". – alex

15

Siento llegar tarde, esto funcionó para mí:

SELECT p.id 
    FROM properties p 
LEFT JOIN (SELECT t.id 
      FROM PROPERTIES t 
      WHERE t.vendor = 'abc' 
     ORDER BY RAND() 
      LIMIT 30) x ON x.id = p.id 
    WHERE x.id IS NULL 
    LIMIT 10, 20 
+0

Gracias a OMG Ponies, ya lo hice en PHP, pero aprenderé algo de esto. +1 – alex

+0

¡Esta es la mejor respuesta! Totalmente trabajado para mi –

Cuestiones relacionadas