Mostrar solo cada segunda fila después de ejecutar una cláusula WHERE

Estoy tratando de mostrar solo cada segunda fila después de seleccionar algo de mi base de datos.

Mi selección se ve así:

SELECT * FROM table where partnerID = '1'

Ahora, a partir de los resultados de esa consulta de selección, quiero obtener solo una de cada dos filas.

Es eso posible ?

preguntado el 22 de mayo de 12 a las 16:05

¿Hay un campo de fila numerado o desea cualquier otro resultado de la consulta? -

Quiero filas alternas solo de esa consulta específica, hay un campo de fila numerado, pero el contenido podría ser de otro socio. -

"cada 2da fila". ¿Ordenado por qué? -

4 Respuestas

$count = 0;
while($row = mysql_fetch_array($results)) {
    $count++;
    if($count % 2 == 1) continue;

    // What you want to do with the rows you don't want to skip here...
}

En una nota al margen, puede usar esta misma estrategia para mostrar solo cada 3.ª fila, o cada 4.ª fila, simplemente cambiando el número que coloca al lado del operador de módulo

if($count % 3 != 0) continue; // Show only every third row
if($count % 4 != 0) continue; // Show only every fourth row

contestado el 22 de mayo de 12 a las 18:05

SELECT * FROM (
    SELECT  @n := @n + 1 AS position,
            t.*
    FROM (SELECT @n:=0) counter,
         table t
    WHERE partnerID = 1)
AS query
WHERE MOD(position,2) = 0

contestado el 22 de mayo de 12 a las 17:05

@PaulBellora He editado la respuesta, parece funcionar ahora. - Assylias

Puede hacer esto de la siguiente manera:

SELECT * FROM
(
    SELECT
      @I := @I + 1 AS rowNumber,
      tablename.*

    FROM
      tablename,
      (SELECT @I := 0) VT1

    WHERE partnerID = 2

    ORDER BY ID
) NumberedRows
WHERE MOD(rowNumber, 2)=0
;

contestado el 22 de mayo de 12 a las 18:05

@ypercube: Correcto. Eso es lo que quise decir (en la base de datos) - webbiedave

@Cylindric: te has perdido el where partnerID = '1' parte. - ypercubeᵀᴹ

@ypercube: Si OP no puede agregar eso en sí mismo, debería alejarse lentamente de su computadora ahora;) - webbiedave

Estoy asumiendo table tampoco es el nombre real de la tabla, por lo que no parecía tener sentido hacer que coincidiera exactamente con un ejemplo hipotético. - Cilíndrico

@Cylindric: Los futuros lectores pueden preguntarse por qué eliminó esa parte mientras agregaba ORDER BY ID. (¿Es esa una mejor práctica? ¿Era necesaria? ¿Es opcional?, etc...) - ypercubeᵀᴹ

No estoy seguro de si esta es la respuesta correcta, pero parece que necesitaría usar algo como la función MOD (http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_mod)

SELECT * FROM `table` WHERE id & 1;

Devolvería filas impares

contestado el 22 de mayo de 12 a las 16:05

Su SQL hace una gran suposición sobre la consecutividad de la identificación, por lo que no es aconsejable. - webbiedave

Hace suposiciones sobre la consecutividad de los ID y también sobre la consecutividad de los ID que cumplen con el criterio partnerID=1. El OP quiere tomar cada segunda fila de entre las filas devueltas por una declaración de selección arbitraria, no solo cada segunda fila de la tabla. - octern

Gracias chicos por la información, no estaba 100% seguro como dije en mi respuesta. Sólo trato de ayudar. - Jako

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.