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

Consulta MySQL

Estas en el tema de Consulta MySQL en el foro de Mysql en Foros del Web. Hola, tengo una duda sobre como hacer una consulta. Tengo una tabla llamada "catalago", con los campos Registro, Títulos, Autores, etc... en la que almaceno ...
  #1 (permalink)  
Antiguo 26/03/2008, 13:13
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Consulta MySQL

Hola,

tengo una duda sobre como hacer una consulta.

Tengo una tabla llamada "catalago", con los campos Registro, Títulos, Autores, etc... en la que almaceno documentos.
y otra llamada "ejemplares", con los campos Registre, y "Registro ejemplar", que funciona de esta manera:


Registro | Registro Ejemplar
53 1
53 2
53 3
53 4
54 1
55 1
55 2

o sea que por cada documento, tiene el registro, y un identificador de ese documento.

Lo que necesito es que entre otras cosas, me seleccione el número de ejemplares que tiene un documento, que en este caso creo que seria el número maximo que tiene el campo "registro ejemplar" para cada "registro".

el problema es que no sé como hacer la consulta, que de momento está asi:

Código PHP:
$consulta="SELECT catalogo.Registro, catalogo.Título, catalogo.Autores, catalogo.Editor, catalogo.Signatura FROM catalogo, ejemplares WHERE ORDER BY Registre DESC LIMIT ".$_POST['numeronovedades'].""
(es para que me seleccione los ultimos x libros)

Última edición por Elisa85; 26/03/2008 a las 13:34
  #2 (permalink)  
Antiguo 26/03/2008, 14:12
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 3 meses
Puntos: 7
Re: Consulta MySQL

SELECT catalogo.Registro, catalogo.Titulo, catalogo.Autores, catalogo.Editor, catalogo.Signatura
FROM catalogo, ejemplares
GROUP BY catalogo.registro
WHERE catalogo.registro = ejemplares.registro
ORDER BY "Tu condición hecha en php (límite de novedades)"


Probá esto, lo hice muy a vuelo y con poco tiempo porque me tengo que retirar. Saludos.
  #3 (permalink)  
Antiguo 27/03/2008, 02:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Consulta MySQL

Mejor asi:

Código:
SELECT catalogo.Registro, 
             catalogo.Titulo, 
             catalogo.Autores, 
             catalogo.Editor, 
             catalogo.Signatura, 
             count(*) as numero_ejemplares 
FROM catalogo LEFT JOIN ejemplares 
        ON catalogo.registro = ejemplares.registro
GROUP BY catalogo.Registro, 
                 catalogo.Titulo, 
                 catalogo.Autores, 
                 catalogo.Editor, 
                 catalogo.Signatura;

o

Código:
SELECT catalogo.Registro, 
             catalogo.Titulo, 
             catalogo.Autores, 
             catalogo.Editor, 
             catalogo.Signatura, 
             MAX("Registro ejemplar") as numero_ejemplares 
FROM catalogo LEFT JOIN ejemplares 
        ON catalogo.registro = ejemplares.registro
GROUP BY catalogo.Registro, 
                 catalogo.Titulo, 
                 catalogo.Autores, 
                 catalogo.Editor, 
                 catalogo.Signatura;
Quim
  #4 (permalink)  
Antiguo 27/03/2008, 04:38
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Consulta MySQL

Hola, gracias a los 2, lo de Adolfiten no funcionó... no me da resultados.

Y lo quim, se pueden usar Joins con cualquier tipo de tabla? yo estoy usando MyISAM.

Código:
SELECT catalogo.Registro, catalogo.Título, catalolo.Autores, catalogo.Editor, catalogo.Signatura, ejemplares.Ejemplar
FROM catalogo, ejemplares GROUP BY catalogo.Registro 
WHERE catalogo.Registro=ejemplares.Registro 
ORDER BY catalogo.Registro DESC LIMIT ".$_POST['numnovetats']."";
esto es como me dijo adolfiten, pero no me funciono...

También habia pensado en hacer una subconsulta cogiendo primero los máximos para cada registro pero nada... (no se como hacerlo... soy basante nueva con las consultas también)
  #5 (permalink)  
Antiguo 28/03/2008, 01:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Consulta MySQL

No conozco MyISAM, estamos en el foro de MySql, pero creo que JOIN forma parte del Sql estándar y si se puede aplicar a cualquier tipo de tabla, incluso entre tablas y vistas o tablas y subquerrys o entre querrys y querrys. Claro que cada servidor de BBDD tiene sus peculiaridades.


Quim
  #6 (permalink)  
Antiguo 28/03/2008, 02:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Consulta MySQL

Parece que MyISAM es el motor de MySQL, no deberias tener problemas creo.

Quim
  #7 (permalink)  
Antiguo 28/03/2008, 04:59
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
Re: Consulta MySQL

MyISAM es uno de los motores que maneja MySQL, pero no soporta bases de datos relacinales ni transacciones.
El motor por default que usa MySQL actualmente es InnoDB.
  #8 (permalink)  
Antiguo 28/03/2008, 06:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Consulta MySQL

Toda la razon, y perdon por el despiste.

Con InnoDB se puede hacer los JOINs de que hablabamos, yo me plantearia actualizar.

Quim
  #9 (permalink)  
Antiguo 29/03/2008, 14:30
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Consulta MySQL

Hola de nuevo, perdon por el retraso en contestar.

No pasa nada por el despiste quimfv ;)

No puedo modificar el tipo de tablas ahora con lo cual tengo que seguir utilizando myisam, pero debe haber alguna manera de hacerlo espero
  #10 (permalink)  
Antiguo 30/03/2008, 10:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: Consulta MySQL

Elisa85,
si lo que quieres es
Cita:
... el número maximo que tiene el campo "registro ejemplar" para cada "registro".
creo que esta puede esta con LEFT JOIN debe ser una posible solución, y observarás que se parece bastante a la una de las que te propuso quimfv. El left join hace que incluso los libros de los que no se ha vendido ningún ejemplar aparezcan en la lista.

Código PHP:
SELECT c.registroc.tituloc.autorMAX(e.registroejemplar) AS ejemplares FROM `catalogoc LEFT JOIN ejemplares e ON c.registro=e.refregistro GROUP BY c.registro ORDER BY e.registroejemplar DESC LIMIT 10 
En lugar de 10 pones el límite que quieras con PHP.
De todas formas, tendrás que comprobar si es lo que quieres, pues más lógico sería buscar la suma de todos los ejemplares pedidos por libro y ordenar los libros... Para eso tendrás que usar SUM.
No soy un técnico, pero en cuanto a lo que se refiere al uso de LEFT JOIN, diré que puede usarse con MyISAM; otra cosa es que este motor, a diferencia de InnoDB, te obligue a llevar un control más estricto mediante programación de los borrados en las tablas relacionales...
  #11 (permalink)  
Antiguo 01/04/2008, 03:52
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Consulta MySQL

Hola,
bueno me habéis dado ideas con lo del group by, y los joins no me acaban de quedar claro pero he conseguido el resultado que quería con esto:

Código:
SELECT catalogo.Registre, MAX(ejemplares.Ejemplar), catalogo.Titulo,  
catalogo.Autores, catalogo.Editor, catalogo.Signatura 
FROM ehemplars, catalogo 
WHERE catalogo.Registre = ejemplares.Registro 
GROUP BY ejemplars.Registro 
ORDER BY catalogo.Registro DESC LIMIT (PHP)
Gracias a todos!
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 04:11.