SQL - Comprobar valores duplicados

(Este proyecto está todo escrito en JS)

Entonces, tengo una tabla llamada paid_offers, y dos columnas llamadas offer_id y entity_id Lo que estoy tratando de hacer es obtener un recuento de todos los offer_id valores asociados con un solo entity_id.

EDIT: Ejemplo: entidad_id A tiene 35 ofertas disponibles (por lo tanto, hay 35 filas con ID de oferta únicas, pero todas con la misma entidad_id)

Entonces, obtener el conteo no es un problema con arrayList.length, pero solo necesito un enfoque para obtener la matriz real. ¡Gracias por la ayuda!

EDITAR: Según la solicitud, ¡más información! Voy a usar la salida como una matriz.

Entonces, este proyecto está escrito usando Titanium (De appcelerator). No necesito nada más que la consulta. Entonces, sería lo que está dentro de las comillas aquí, para aquellos que no lo saben.

var offersList = db.execute("SELECT entity_id FROM paid_offers");

Ahora, el objetivo no es solo obtener la lista de ID, sino la lista de offer_id valores asociados con cada único entity_id valor. Creo que se parecería a:

var offersList = db.execute("SELECT offer_id FROM paid_offers WHERE entity_id = entity_id

Excepto que eso no funcionaría, pero ese es mi hilo de pensamiento mientras reviso esto.

preguntado el 30 de junio de 12 a las 19:06

Necesita dar más detalles para obtener una respuesta útil. -

¿Para obtener la cuenta de qué? ¿Cómo se ve la matriz que estás obteniendo? ¿Cómo lo conseguiste? ... pronto. -

No dejes que te moleste, algunas personas simplemente votan negativamente en preguntas que creen que son demasiado novatas o fáciles. A menudo olvidan que también fueron novatos en algún momento. Voté esto para mantenerte en 0 -

No estoy seguro acerca de su pregunta anterior, pero realmente no hay suficientes detalles aquí ... Debe dar un poco más de detalle: ¿cómo está consultando exactamente su base de datos (MySQL, MSSQL, ???) desde Javascript, usando una biblioteca? ¿De qué forma son los datos que te están dando? Un objeto, una matriz, ???? -

@BobSinclar, es una suposición, pero probablemente hubo un voto negativo porque alguien creído según la información sobre herramientas "La pregunta no muestra ningún esfuerzo de investigación". Jake, suele ser útil publicar lo que has probado. Esto le muestra a la comunidad en general que no solo los estás esperando, sino que también codificas para ellos. también ayuda ayudando a todos los demás a ver lo que está tratando de hacer, que es la mejor explicación posible de su problema. También puede mejorar la calidad de las respuestas que recibe. -

4 Respuestas

Si está tratando de contar las ofertas para cada entidad, es

SELECT entity_id, COUNT(offer_id) As Count
FROM   paid_offers
GROUP BY entity_id

Esto solo encontrará entidades con al menos una oferta.

Respondido el 30 de junio de 12 a las 20:06

Muchas gracias. Tuve exactamente este código en un punto, y aquí cometí el error de invertir la entidad_id y oferta_id en cada caso haciéndolo inútil. Gracias de nuevo - JTApps

I pensar lo que buscas es esto...

SELECT offer_id, COUNT(*) As Count
FROM   paid_offers
GROUP BY offer_id

Lo que daría algo como.

offer_id   Count
1          1
2          4
3          2
...

Tenga en cuenta que excluirá cualquier ID de oferta que no esté presente en la tabla, por lo que nunca habrá un recuento de 0.

Otra nota sobre el uso de Array.length() para hacer un conteo: devuelve un conjunto de registros (potencialmente grande) a JS, que luego lo cuenta. Esto utiliza muchos recursos para no obtener muchos beneficios; es mejor hacer lo COUNT en SQL (como se muestra arriba) y simplemente obtenga el resultado.

Respondido el 30 de junio de 12 a las 19:06

Ok, esto parece estar saliendo como solo 1 cada vez. Así es como lo llamo: offersList[i].Count.toString() + ' Offer(s) Availible' Y luego solo devuelve '1' cada vez. Solo para asegurarme de que lo dije tan bien como debería haberlo hecho antes, estoy tratando de obtener el recuento de los únicos offer_id filas con el mismo entity_id valor. De esa manera puedo decir 'Walmart (identity_id de 5) tiene 5 ofertas disponibles (offer_ids de 1,2,3,etc) - JTApps

Intente ejecutar el SQL directamente, usted debemos obtener la tabla como se describe en la respuesta, en cuyo caso, cada valor de i debe representar una fila diferente (no necesariamente la coincidencia offer_id ya que no estamos ordenando específicamente). Intente usar un depurador y examinar el offersList variable (por ejemplo, en Firebug) y vea lo que realmente obtiene. Mejor aún, ejecute la consulta contra SQL directamente; luego sabremos si es un problema de consulta o un problema de JS. Le echaré otro vistazo a esto en unas horas. Básico

Lo hice funcionar, solo tenía que revertir el código que tenía y reemplazar 'offer_id' en su código con 'entity_id' y viceversa: JTApps

@ Jakexx360 Sí, vi la respuesta aceptada, eso me enseñará a no copiar y pegar de la Q :) - Básico

Esto no es simple ni posible con SQL puro, ya que cada columna en el resultado siempre puede tener un solo valor, pero necesita una lista. Pruebe este enfoque en su lugar:

select entity_id, offer_id
from paid_offers

En JavaScript, lea los resultados y cree una matriz para cada entity_id y anexar el offer_ids a esa matriz. Después de procesar todos los resultados de la consulta, tendrá la estructura que desea. Pseudocódigo:

data = {}
for (entity_id, offer_id in rows) {
    var a = data[entity_id]
    if (a === undefined) {
        a = []
        data[entity_id] = a
    }

    a.push(offer_id)
}

Respondido el 30 de junio de 12 a las 20:06

Entonces, ¿qué tal obtener la otra columna en una lista de matriz? Luego, tenga una salida para bucle que pase por cada offer_id . Luego, en el interior, revise cada Entity_id . Si aparece más de un ID de entidad, no elimine ese ID de oferta de su lista final de matrices.

¿O por qué no hacerlo simplemente con llamadas SQL?

Respondido el 30 de junio de 12 a las 19:06

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