MySQL - Obtener los valores de una tupla especifica en tablas relacionadas

 
Vista:
Imágen de perfil de Mk

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Mk (6 intervenciones) el 23/02/2015 15:27:56
Hola de nuevo, estoy provando varias consultas para obtener un resultado específico pero no sale bien.
Tengo dos tablas relacionadas, pongamos por ejemplo estas:

Tabla keywords (id_k, id_d, keyword) y tabla positions (id_p, id_k, data, position)

Keywords tiene:

id_k | id_d | keyword |
--------------------------- |
1 | 1 | kw1 |
2 | 1 | kw2 |
3 | 1 | kw3 |

Positions tiene:

id_k | id_d | data | position |
----------------------------------------------- |
1 | 1 | 0000-00-00 | 0 |
2 | 1 | 2015-02-20 | 8 |
3 | 1 | 2015-02-22 | 5 |
4 | 2 | 0000-00-00 | 0 |
5 | 3 | 0000-00-00 | 0 |


Uso la consulta siguiente:
SELECT DISTINCT keywords.keyword, keywords.id_k, positions.data, positions.position FROM `keywords`, `positions` WHERE id_d=1 AND keywords.id_k=positions.id_k ORDER BY positions.id_p DESC

pero lo que me devuelve es:

keyword | id_k | data | position |
----------------------------------------------------- |
1 | 1 | 2015-02-20 | 8 |
1 | 1 | 2015-02-22 | 5 |
3 | 1 | 0000-00-00 | 0 |
2 | 1 | 0000-00-00 | 0 |
1 | 1 | 0000-00-00 | 0 |

quiero quitar los duplicados y dejar las tuplas con las fechas más recientes, es decir deberia de quedar así:

keyword | id_k | data | position |
----------------------------------------------------- |
1 | 1 | 2015-02-22 | 5 |
3 | 1 | 0000-00-00 | 0 |
2 | 1 | 0000-00-00 | 0 |

Qué hago mal en la consulta o como debería ser para obtener este resultado?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Ramiro (4 intervenciones) el 24/02/2015 18:58:28
Por favor postea bien la estructura de las tablas y sus datos, incluidos los tipos, ya que la consulta que ejecutas no se condice con la, supuesta, estructura de tablas que muestras.
Si no hay que estar adivinando y la cosa se hace mas dificil.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mk

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Mk (6 intervenciones) el 24/02/2015 19:10:58
La estructura de las tablas creo que esta bastante clara, estaba bien alineado todo hasta que lo he posteado. Los tipos no creo que haya dificultad por saberlos pero los números son int, las fechas son date y los string son varchars y si, la consulta que he puesto devuelve exactamente eso. Creía que lo había hecho bastante claro, la pregunta es, dadas esas dos tablas, como consigo la última que pongo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Ramiro (4 intervenciones) el 24/02/2015 19:38:29
Por ejemplo en la consulta (SELECT) esta el campo "positions.id_p" que no logro ver que datos tiene, porque no esta en lo que posteas como contenido de cada tabla.
Por otro lado si "keywords.id_k=positions.id_k " no tengo los valores 4 y 5 en el campo keywords.id_k de la tabla keywords, entonces se me hace dificil probar la consulta.
Además en la consulta pones una columna "SELECT DISTINCT keywords.keyword..." y en el resultado me muestra (1,1,,3,2,1) y me deberia mostrar "KW1", "KW2"...etc estas son cosas que me indican que lo que posteas que has puesto no "devuelve exactamente eso".
En resumen, si no estan claras las relaciones y si, de los datos no las puedo deducir, la respuesta a tu pregunta es: "ni idea"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mk

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Mk (6 intervenciones) el 24/02/2015 20:25:36
Hola de nuevo,

Keywords tiene:

id_k | id_d | keyword |
--------------------------- |
1 | 1 | kw1 |
2 | 1 | kw2 |
3 | 1 | kw3 |

Positions tiene:

id_p | id_k | data | position |
----------------------------------- |
1 | 1 | 0000-00-00 | 0 |
2 | 1 | 2015-02-20 | 8 |
3 | 1 | 2015-02-22 | 5 |
4 | 2 | 0000-00-00 | 0 |
5 | 3 | 0000-00-00 | 0 |

Había un error de copiar y pegar. Más fácil, dada estas dos tablas que ahora si que están bien los datos, olvídate de la consulta que he puesto. El resultado necesito que sea:

keyword | id_k | data | position |
----------------------------------------- |
Kw1 | 1 | 2015-02-22 | 5 |
Kw2 | 2 | 0000-00-00 | 0 |
Kw3 | 3 | 0000-00-00 | 0 |

donde el id_d sea igual a 1. Y que para cada Kw sólo hubiera un resultado, que tendría que ser el que tiene la fecha más actual.

Gracias y perdona por el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por MMan (3 intervenciones) el 24/02/2015 20:45:42
SELECT k.keyword, k.id_k, MAX(p.data), p.position
FROM `keywords` AS k, `positions` AS p
GROUP BY k.keyword
WHERE id_d=1 AND k.id_k=p.id_k
ORDER BY positions.id_p DESC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mk

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Mk (6 intervenciones) el 25/02/2015 09:59:32
Hola, la consulta no funcionaba, es así pero igualmente no me devuelve los resultados que espero.

SELECT k.keyword, k.id_k, MAX(p.data), p.position
FROM `keywords` AS k, `positions` AS p
WHERE k.id_d=1 AND k.id_k=p.id_k
GROUP BY k.keyword
ORDER BY p.id_p DESC;

Las 3 primeras columnas van bien, pero la de position no, los resultados que aparecen en position no se corresponden con los de la fecha, sinó que aparecen los primeros, es decir, por ejemplo

keyword | id_k | data | position |
----------------------------------------- |
Kw1 | 1 | 2015-02-22 | 5 |
Kw2 | 2 | 0000-00-00 | 0 |
Kw3 | 3 | 0000-00-00 | 0 |

en la KW1 en lugar de aparecer 5, aparece 0 ya que hay un registro anterior de 0, aunque la fecha sea la más actual.
Necesito también que la tupla que devuelva se correspondan todos los parámetros, que para la kw1, devuelva su id correcto, la última fecha, y la posición que tenia esa kw en esa fecha y no la primera posición que tuvo.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los valores de una tupla especifica en tablas relacionadas

Publicado por Guifré (1 intervención) el 30/04/2015 01:08:39
Buenos días,

mi consulta es parecida y supongo que ahora no se responderla porque hace tiempo que no manejo BD. tengo una tabla con 3 columnas y quiero obtener los valores únicos de cada columna. ej:

1
2
3
4
5
6
7
8
9
|   A    |   B   |   C   |
+--------+-------+-------+
|   1    |   5   |   p   |
--------------------------
|   2    |   5   |   p   |
--------------------------
|   1    |   5   |   g   |
--------------------------
|   2    |   6   |   g   |

Alguien puede ayudarme con una sentencia que me devuelva 1 - 2 - 5 - 6 - p - g ?

supongo que la consutla deberia ser algo como Select distinc A,B,C from table ... i algo más...

de momento he hecho 3 sentencias, una por cada columna, pero no creo que sea muy correcto

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar