Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

ORDER BY me duplica el resultado

Estas en el tema de ORDER BY me duplica el resultado en el foro de Bases de Datos General en Foros del Web. Hola estoy creando una conexion con el blog a la pagina principal en Flash, lo que he hecho es crear un archivo .XML con PHP ...
  #1 (permalink)  
Antiguo 17/09/2009, 05:11
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
ORDER BY me duplica el resultado

Hola estoy creando una conexion con el blog a la pagina principal en Flash, lo que he hecho es crear un archivo .XML con PHP para que lo pueda leer flash, entonces mi problema esta en la llamada a MYSQL que me duplica el resultado 2, estoy utilizando el siguiente codigo:

Código PHP:
<?php
$link 
mysql_connect ("localhost","usuario","password");
mysql_select_db("base de datos");

<!-- 
Aqui si quito ORDER BY no me lo duplicapero con el incovenienteclaro esta que no me lo ordena-->

$query 'SELECT * FROM ex_awsompxgimagecaptions,ex_posts WHERE post_type="post" AND post_status="publish" ORDER BY post_date DESC';
$results mysql_query($query);

<!-- ^^^^^^^^^^^^^^^^-->


echo 
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo 
"<news>\n";

while(
$line mysql_fetch_assoc($results)) {
        echo 
"<noticia>";
        echo 
"<titulo>" $line["post_title"] . "</titulo>\n";
        echo 
"<mensaje>" $line["post_excerpt"] . "</mensaje>\n";
        echo 
"<fecha>" $line["post_date"] . "</fecha>\n";
        echo 
"<imagen>" $line["imagepath"] . "</imagen>\n";
        echo 
"</noticia>\n";
}
echo 
"</news>\n";

mysql_close($link);

?>
Llevo un par de semanas atascado aki, espero que me puedanhechar una manita gracias
  #2 (permalink)  
Antiguo 17/09/2009, 05:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

No es que el ORDER BY te duplique resultados, no lo puede hacer porque el ORDER BY solo ordena, no pone datos. Lo que sucede es que tienes datos duplicados en esa tabla, lo que puede ser por errores de diseño y de ingreso de datos.
Si son de diseño, es que no hay definida una PK con campos no autoincrementales, o bien no hay una KEY alternativa declarada como UNIQUE.
Si es de ingreso, es porque el el formulario de ingreso de datos no estás haciendo una validación de lo entrado antes de guardarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/09/2009, 05:28
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

son 2 tablas diferentes y si quito el ORDER BY no me duplica el resultado
  #4 (permalink)  
Antiguo 17/09/2009, 05:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por elexavi Ver Mensaje
son 2 tablas diferentes y si quito el ORDER BY no me duplica el resultado
Yo más pensaría que el resultado se pierde en la tabla, pero la duplicación debe existir en la consulta. Insisto: ORDER BY ordena, no modifica el resultado en registros de la consulta.
Ponle un DISTINCT detrás del SELECT y fijate si la cantidad de registros devueltos es la misma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/09/2009, 05:36
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Miraba las tablas y no hay ningun campo duplicado entre las tablas, con lo de DISTINCT te refieres a:

Código PHP:
$query 'SELECT DISTINCT* FROM ex_awsompxgimagecaptions,ex_posts WHERE post_type="post" AND post_status="publish" ORDER BY post_date DESC';
$results mysql_query($query); 

PD: yo no pretendia mostrar resultado solo quiero que me ordene la tabla de forma descendente, e insisto si quito el ORDER BY post_date DESC' no se me duplica pero, claro esta que no me lo ordena

Última edición por elexavi; 17/09/2009 a las 05:42 Razón: corregir PD
  #6 (permalink)  
Antiguo 17/09/2009, 05:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Primero: SI no los vas a mostrar, ¿para qué los ordenas? Esa consulta sólo tiene sentido si vas a mostrar algo. De lo contrario no hace nada a la tabla...
Segundo:
Código sql:
Ver original
  1. SELECT DISTINCT *
  2. FROM ex_awsompxgimagecaptions , ex_posts
  3. WHERE
  4.     post_type="post" AND
  5.     post_status="publish"
  6. ORDER BY post_date DESC;
Esto debería mostrar todos los registros distintos, a menos que UNO de los campos tenga valores diferentes. En ese caso el registro parece ser igual, a menos que verifiques campo a campo.
En cualquier caso, la sentencia tal y como la estás poniendo genera un producto cartesiano haciendo un JOIN con los campos del mismo nombre como pivote del mismo. Solamente se agrupan aquellos que llevan el mismo nombre de campo y el valor de este igual entre ambas tablas. De no ser así, es realmente un producto cartesiano y por tanto el resultado es igual a combinar cada registro de la primera tabla con cada registro de la segunda tabla, lo que si tuvieras 10 registros en cada una hará que te devuelva una tabla de 100 registros (10 x 10).

¿Se entiende la idea?

Es posible que eso sea lo que está pasando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/09/2009, 06:14
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Primero: SI no los vas a mostrar, ¿para qué los ordenas? Esa consulta sólo tiene sentido si vas a mostrar algo. De lo contrario no hace nada a la tabla...
Segundo:
Código sql:
Ver original
  1. SELECT DISTINCT *
  2. FROM ex_awsompxgimagecaptions , ex_posts
  3. WHERE
  4.     post_type="post" AND
  5.     post_status="publish"
  6. ORDER BY post_date DESC;
Esto debería mostrar todos los registros distintos, a menos que UNO de los campos tenga valores diferentes. En ese caso el registro parece ser igual, a menos que verifiques campo a campo.
En cualquier caso, la sentencia tal y como la estás poniendo genera un producto cartesiano haciendo un JOIN con los campos del mismo nombre como pivote del mismo. Solamente se agrupan aquellos que llevan el mismo nombre de campo y el valor de este igual entre ambas tablas. De no ser así, es realmente un producto cartesiano y por tanto el resultado es igual a combinar cada registro de la primera tabla con cada registro de la segunda tabla, lo que si tuvieras 10 registros en cada una hará que te devuelva una tabla de 100 registros (10 x 10).

¿Se entiende la idea?

Es posible que eso sea lo que está pasando.
Perdon me exprese mal, me referia que con el ORDER BY no queria mostrar que tenias tu razon al que solo ordena.

Lo que yo quiero es mostrar la imagen que esta en la tabla ex_awsompxgimagecaptions y el post del blog que esta en la tabla ex_posts con su filtro para que solo me muestro los publicados post_status="publish" y que sean posts post_type="post" y ordenarlos por la fecha del mas reciente al mas antiguo con ORDER BY post_date DESC. Ese es mi idea, pero lo que me ocurre creo que es lo que tu dice que me lo multplica, porque no se si al ordenarlo, no se si hace falta definirlo que lo ordene con la fecha de la tabla de ORDER BY ex_posts.post_date DESC asi lo he intentado pero nada
  #8 (permalink)  
Antiguo 17/09/2009, 06:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Si el problema es que se está produciendo un producto cartesiano, como supongo, entonces lo que hay que hacer es evitar esa situación haciendo que la consulta devuelva sólo los registros que coincidan entre ambas tablas en uno o más campos específicos.
Suponiendo que exista un campo que relacione las tablas, por ejemplo un exposts_id en la tabla ex_awsompxgimagecaptions, podría ser algo así (tu pon lo que corresponda):
Código sql:
Ver original
  1. SELECT DISTINCT *
  2. FROM ex_awsompxgimagecaptions  A INNER JOIN ex_posts P ON A.expost_id = P.expost_id
  3. WHERE
  4.     post_type="post" AND
  5.     post_status="publish"
  6. ORDER BY post_date DESC;

Esto haría que solamente devuelva registros donde el post se corresponda con la una imagen.

Por allí creo que andaría la cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 17/09/2009, 07:50
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si el problema es que se está produciendo un producto cartesiano, como supongo, entonces lo que hay que hacer es evitar esa situación haciendo que la consulta devuelva sólo los registros que coincidan entre ambas tablas en uno o más campos específicos.
Suponiendo que exista un campo que relacione las tablas, por ejemplo un exposts_id en la tabla ex_awsompxgimagecaptions, podría ser algo así (tu pon lo que corresponda):
Código sql:
Ver original
  1. SELECT DISTINCT *
  2. FROM ex_awsompxgimagecaptions  A INNER JOIN ex_posts P ON A.expost_id = P.expost_id
  3. WHERE
  4.     post_type="post" AND
  5.     post_status="publish"
  6. ORDER BY post_date DESC;

Esto haría que solamente devuelva registros donde el post se corresponda con la una imagen.

Por allí creo que andaría la cosa.
he mirado las tablas como te he dicho antes no coincide con ningun campo ni el de identidad porq uno es ID y el otro es capid
  #10 (permalink)  
Antiguo 17/09/2009, 07:55
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

esq no existe ninguna relacion entre las dos tablas son totalmene independientes, he pensado tambien crear dos query diferentes para llamar las tablas por separado pero no sabria como acoplarlo despues en en el while
  #11 (permalink)  
Antiguo 17/09/2009, 07:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Según decías en el post anterior:
Cita:
Lo que yo quiero es mostrar la imagen que esta en la tabla ex_awsompxgimagecaptions y el post del blog que esta en la tabla ex_posts con su filtro para que solo me muestro los publicados post_status="publish" y que sean posts post_type="post" y ordenarlos por la fecha del mas reciente al mas antiguo con ORDER BY post_date DESC.
Ahora bien, según el último post, no hay nada que vincule uno a otro. Entonces, ¿cómo haces para saber qué imagen corresponde a qué post? ¿Cuál es el criterio de selección de las imágenes conforme a los posts, o es que solamente hay una imagen? Si hay más de una, ¿cómo es que determinas cuál debe acompañar al post?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 17/09/2009, 07:57
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Según decías en el post anterior:
Ahora bien, según el último post, no hay nada que vincule uno a otro. Entonces, ¿cómo haces para saber qué imagen corresponde a qué post? ¿Cuál es el criterio de selección de las imágenes conforme a los posts, o es que solamente hay una imagen?
pues lo que he hecho es meter las imagenes en la tabla de mysql en el mismo orden que he ido escribiendo los post para que me coincidan
  #13 (permalink)  
Antiguo 17/09/2009, 08:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Si la inserción de imágenes y de posts usan una PK autoincremental, y partieron de cero las dos, los ID de ambas tablas se deberían corresponder.
Pero si al menos uno de ambos falló al insertarse, los ID se corrieron, por lo que no sirven de referencia.
En estos casos lo que se debe hacer es poner un campo FK en una de las dos tablas; como la relación es 1:1, es indistinto cuál se usa de PK y cuál de FK, pero por una cuestión de lógica, el post es lo más importante, así que la FK debería provenir de la tabla de imagenes.
Lo que tendrías que haber hecho es insertar primero la imagen, recuperar el ID generado e insertarlo en un campo adicional de la tabla del post y luego recién guardar el post.

Ahora bien, como está en este momento, no podrás generar una consulta que te devuelva post e imagen, ya que la única otra opción sería hacer un GROUP BY contra el ID de la tabla de posts... pero como en el JOIN el primer registro combinado de la segunda tabla siempre sería el primero... entonces te devolvería cada post vinculado a la misma primera imagen de la otra tabla. ¿se entiende?

A como lo veo ahora, salvo que tengas algún otro campo para forzar una vinculación, lo único que te queda es levantar las tablas por separado y mostrar post e imagen vía código de la página.
El SQL no hace magia; si no hay forma de vincular en forma univoca ambas tablas, no hay modo de recuperar en una sola lo que quieres...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 17/09/2009, 08:27
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje

A como lo veo ahora, salvo que tengas algún otro campo para forzar una vinculación, lo único que te queda es levantar las tablas por separado y mostrar post e imagen vía código de la página.
El SQL no hace magia; si no hay forma de vincular en forma univoca ambas tablas, no hay modo de recuperar en una sola lo que quieres...
Se puede introducir 2 resultados de query en un solo while????

ejemplo:
Código:
$query = 'SELECT * FROM ex_posts WHERE post_type="post" AND post_status="publish" ORDER BY ID DESC';
$results = mysql_query($query);

$query1 = 'SELECT * FROM ex_awsompxgimagecaptions ORDER BY capid DESC';
$results1 = mysql_query($query1);


echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<new>\n";

while($line = mysql_fetch_assoc($results)) {
		echo "<noticia>";
		echo "<titulo>" . $line["post_title"] . "</titulo>\n";
		echo "<mensaje>" . $line["post_excerpt"] . "</mensaje>\n";
		echo "<fecha>" . $line["post_date"] . "</fecha>\n";
		echo "<imagen>" . $line1["imagepath"] . "</imagen>\n";
		echo "</noticia>\n";
}
echo "</new>\n";
ya se que asi no es porq no me va pero ay algua forma???
  #15 (permalink)  
Antiguo 17/09/2009, 08:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Eso es ya problema de PHP y no de Bases de Datos. Las reglas del foro no permiten código de programación aquí.
Además, en el Foro de PHP encontrarás mejores respuestas de ese tema, porque están los expertos en ese lenguaje.
Aún así, en principio, debe haber una forma de hacerlo así como dices. Pregunta allá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 17/09/2009, 08:34
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso es ya problema de PHP y no de Bases de Datos. Las ...Foro de PHP encontrarás mejores respuestas de ese tema, porque están los expertos en ese lenguaje.
Aún así, en principio, debe haber una forma de hacerlo así como dices. Pregunta allá.
MUCHISIMAS GRACIAS POR TU TIEMPO!!!!! ya te contare como acaba la cosa
  #17 (permalink)  
Antiguo 19/09/2009, 06:33
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Una pregunta mas, ya encontre una solucion pero... queria saber si cambio los nombres de los campos de ID de las tabalas me puede servir para algo???
  #18 (permalink)  
Antiguo 19/09/2009, 10:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Lo mejor que puedes hacer es poner la clave de la imagen en un campo a agregar en la tabla de posts. Con eso se resolvería todo.
Es la mejor opción, porque en tanto no haya un modo de relacionarlas unívocamente, no tendrás una solución práctica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 20/09/2009, 15:58
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Te refieres que si por ejemplo en la tabla ex_awsompxgimagecaptions quiero coger imagepath, agregue a la tabla de ex_posts el campo imagepath, y aunque sea luego yo lo introdusca manualmente en la tabla, porq no se como podria agregarlo para que lo meta automaticamente
  #20 (permalink)  
Antiguo 20/09/2009, 20:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

La idea es poner el ID de la tabla ex_awsompxgimagecaptions en la tabla ex_posts, de modo de relacionarlos en forma inequívoca. Poner el campo imagepath no es funcional, porque no se trata de un campo definido como PK.
Lo que debe ir es una PK, no otra cosa.
Postea la estructura de las tablas, para poder ayudarte mejor.
Me refiero a la sentencia CREATE TABLE que las construye...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 21/09/2009, 04:15
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La idea es poner el ID de la tabla ex_awsompxgimagecaptions en la tabla ex_posts, de modo de relacionarlos en forma inequívoca. Poner el campo imagepath no es funcional, porque no se trata de un campo definido como PK.
Lo que debe ir es una PK, no otra cosa.
Postea la estructura de las tablas, para poder ayudarte mejor.
Me refiero a la sentencia CREATE TABLE que las construye...
a raiz de lo que me as dicho me puse a investigar en la abala y he corrdinado los campos de ID como me habias dicho y y he hecho lo siguiente y ahora si me sale bien ordenado y todo

Código:
$query = 'SELECT DISTINCT *FROM ex_awsompxgimagecaptions INNER JOIN ex_posts ON ex_awsompxgimagecaptions.capid = ex_posts.ID WHERE post_type="post" AND post_status="publish" ORDER BY post_date DESC;';
una vez muchisimas gracias
  #22 (permalink)  
Antiguo 21/09/2009, 04:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Perfecto.
Esa es la idea que no debes perder de vista: El modelo relacional requiere que cuando relacionas dos entidades (tablas en este caso), las misma compartan algo que permita relaciona un registro de una tabla con uno (o más) de la otra, en forma indubitable, y eso sólo se hace con claves primarias y claves foráneas.

Me alegra que haya salido bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 21/09/2009, 04:36
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Perfecto.
Esa es la idea que no debes perder de vista: El modelo relacional requiere que cuando relacionas dos entidades (tablas en este caso), las misma compartan algo que permita relaciona un registro de una tabla con uno (o más) de la otra, en forma indubitable, y eso sólo se hace con claves primarias y claves foráneas.

Me alegra que haya salido bien.
Muchas gracias aunque aun no controlo mucho el bocabulario que empleas y que espero me puedas aclarar tambien, me alegro que con tu paciencia y ayuda y mi curiosidad de que aunque sea arriesgandome a destrozar la tabla lo tengamos resuelto, Es que creo que la primera vez que me dijistes lo de codigo

Código:
SELECT DISTINCT *
FROM ex_awsompxgimagecaptions  A INNER JOIN ex_posts P ON A.expost_id = P.expost_id
WHERE
    post_type="post" AND
    post_status="publish"
ORDER BY post_date DESC;
creo qu no lo entendi bien y ademas creo que tambien lo copie mal, porq ahora hice la consulta en en el propio mysql y me salto un error, ya se que aunque las nombres de los capos de identidades que se auto incrementa aunque se llamen igual se pueden relacionar.

y sobre las palabras que no entendi bien son:

PK
KEY UNIQUE
producto cartesiano
claves primarias
claves foráneas
  #24 (permalink)  
Antiguo 21/09/2009, 05:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

PK: Es el acrónimo de PRIMARY KEY y se refiere a un campo o conjunto de campos cuyo valor esa único por cada registro de una tabla. Cuando eso sucede se dice que ese campo es una clave de identificación primaria, ya que es la que permite reconocer un conjunto de atributos dentro de todo el universo de conjuntos de una tabla.
Las PK tienen dos usos básicos en los motores de bases de datos: Identificación y ordenamiento. Como identificación, ya lo aclaramos: Como ordenamiento es porque siendo la clave de búsqueda principal, es útil por cuestiones de uso, utilizarla para mantener el orden físico de los registros de una tabla en el disco, de modo de poder acceder a ellos más rápidamente a través de índices (se denominan agrupados o cluster y sólo hay uno por tabla). En este sentido las PK se usan para eso, lo que implica que cambiar de clave o renumerarla (si fuesen claves numéricas) obliga al DBMS a reescribir tablas e índices.
Por su importancia y uso, son los primeros atributos en ser identificados y los primeros campos que se definen.
Cuando no existen campos que puedan usarse para identificar un registro, una de las reglas de normalización dice que debe agregarse un campo para crear artificialmente una PK. Es habitual que sean numéricos e incrementales, pero no es obligatorio.
Una PK tiene tres condiciones: A) Identifica un registro en una tabla, B) su valor es único en la tabla (UNIQUE), c) No puede ser NULL.

KEY UNIQUE: Se refiere a la condición de un campo como de valor no repetitivo. Esto significa que puede haber más de un campo o conjunto de campos que cumplan con la condición necesaria para ser PK, pero sólo puede usarse uno de esos conjuntos. El resto se denominan claves candidatas y pueden usarse para definir índices de búsqueda y ordenamiento diferentes.
La cláusula KEY UNIQUE suele aparecer en el CREATE de una tabla referida a la PK, porque la PK también debe ser definida como UNIQUE.


PRODUCTO CARTESIANO: Es la resultante de una operación de conjuntos (las tablas son en un sentido, relaciones de conjuntos). Es la peor condición de búsqueda en una consulta y se refiere a el producto de dos tablas, registro por registro; es decir: un producto cartesiano entre dos tablas devuelve una tabla en que se combinan cada registro de la primera con cada uno de los de la segunda.
Si una tabla tuviese 10 campos y 1200 registros, y la otra 50 campos y 10.000 registros, la tabla devuelta tendrá registros de 60 campos (10 + 50) y una longitud de 12.000.000 de registros (1.200 x 10.000). Eso te puede dar una idea de los problemas que causa.

CLAVE FORANEA (FK): Las claves foráneas (también denominadas extranjeras o ajenas) son campos o conjuntos de campos en una tabla que se usan para relacionar esa tabla con otra, y en la cual se almacenan el valor de una PK de la otra tabla. De esa forma se establece la relación entre uno (o más) registro(s) de una tabla con uno (o mas) de otra.
Una FK tiene algunas condiciones:
1. Debe apuntar a una PK. Siempre. No se puede usar otro tipo de campo en la la tabla de origen. Solamente PKs.
2. No puede contener un valor que no exista en la tabla origen.
3. No puede, salvo ciertas excepciones, ser NULL.
4. Debe apuntar a toda la clave y no a parte de ella (en el caso de las PK compuestas).
5. Ambas claves (FK y PK) deben ser del mismo tipo. Si son numéricas, deben ser del mismo rango (TINYINT, SMALLINT, MEDIUMINT, INT o BIGINT) y tipo (SIGNED o UNSIGNED).

Respecto a:
Cita:
creo qu no lo entendi bien y ademas creo que tambien lo copie mal, porq ahora hice la consulta en en el propio mysql y me salto un error,
¿Qué dice el error?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 21/09/2009, 05:46
 
Fecha de Ingreso: enero-2007
Mensajes: 47
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: ORDER BY me duplica el resultado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Respecto a:


¿Qué dice el error?
Código:
Error
consulta SQL:  

$query = 'SELECT DISTINCT *FROM ex_awsompxgimagecaptions INNER JOIN ex_posts ON ex_awsompxgimagecaptions.capid = ex_posts.ID WHERE post_type="post" AND post_status="publish"ORDER BY post_date DESC;';



MySQL ha dicho:  

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$query = 'SELECT DISTINCT *FROM ex_awsompxgimagecaptions INNER JOIN ex_posts ON ' at line 1
creo que era porq estaba el ORDER BY junto a la ultima condidcion, vamos una tonteria
  #26 (permalink)  
Antiguo 21/09/2009, 06:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

Es posible que ese seal el error.
Con MySQL, como es un heredero de C, hay que tener cuidado con los espacios que se pongan o no en determinadas circunstancias (nunca dejes un espacio entre el nombre de una función y el paréntesis, por ejemplo).
Trata de no dejar pegados el asterisco y el FROM, o separa bien el ORDER de la condición anterior.
Es decir, trata de respetar la sintaxis, porque esos errores menores a veces son muy difíciles de encontrar.

Fuera de eso, no hay ningún error visible.
Código sql:
Ver original
  1. SELECT DISTINCT *
  2. FROM ex_awsompxgimagecaptions
  3.      INNER JOIN ex_posts ON ex_awsompxgimagecaptions.capid = ex_posts.ID
  4. WHERE
  5.      post_type="post" AND
  6.      post_status="publish"
  7.      ORDER BY post_date DESC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:00.