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

Consulta a dos Tablas

Estas en el tema de Consulta a dos Tablas en el foro de Mysql en Foros del Web. Se pueden hacer consultas a dos tablas ? lo he puesto asi pero da error en msql: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT DISTINCT ...
  #1 (permalink)  
Antiguo 30/04/2013, 17:34
lucasabogado
Invitado
 
Mensajes: n/a
Puntos:
Consulta a dos Tablas

Se pueden hacer consultas a dos tablas ?

lo he puesto asi pero da error en msql:

Código MySQL:
Ver original
  1. SELECT DISTINCT`post_title`
  2. FROM `wp_posts`
  3. WHERE post_status = 'publish' AND
  4. SELECT FROM 'wp_custom_post_fields'
  5. WHERE site_title = 'Todos los discos' ORDER BY post_date DESC

Última edición por gnzsoloyo; 30/04/2013 a las 18:18
  #2 (permalink)  
Antiguo 30/04/2013, 18:19
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, 4 meses
Puntos: 2658
Respuesta: Consulta a dos Tablas

Por supuesto que te dará error, eso está asombrosamente mal escrito.
Creo que necesitas volver a leer los manuales de SQL...

Sin ofender.
__________________
¿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 01/05/2013, 05:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta a dos Tablas

lucasabogado,
deberías decirnos qué tablas tienes, la estructura de las mismas, los tipos de campos, con ejemplos de datos y qué resultado quieres sacar. De ese modo sabríamos qué quieres buscar y sobre qué datos almacenados. Así podremos orientarte mejor.
  #4 (permalink)  
Antiguo 01/05/2013, 07:27
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, 4 meses
Puntos: 2658
Respuesta: Consulta a dos Tablas

Vamos a ver si se entiende por qué te dije que esa consulta está muy mal escrita, y neecsitas volver a leer los manuales:
- Primero dices que estás juntando dos consultas en una, cada una de las cuales funciona bien por separado.
No puedes juntar dos consultas diferentes en una de cualquier forma. Sólo existen dos formas JOIN y UNION, y no estás usando ninguna.
Código MySQL:
Ver original
  1. SELECT DISTINCT`post_title`
  2. FROM `wp_posts`
  3. WHERE post_status = 'publish'
  4.  
  5.  
  6. SELECT /* Y los campos?*/
  7. FROM 'wp_custom_post_fields'  /* Esto tiene apostrofos. Por qué?*/
  8. WHERE site_title = 'Todos los discos'
  9. ORDER BY post_date DESC

- Luego, estás usando apóstrofos (') para el nombre de una tabla, lo que hace que MySQL lo tome como cadena de texto, y no como tabla. Los nombres de objetos pueden encerrarse con acentos agudos (`) no apóstrofos.

- Estás usando un AND donde tal vez corresponda un UNION, pero un UNION requiere dos consultas con la misma cantidad de campos, del mismo tipo y en el mismo orden... y tu segundo SELECT no tiene ningún campo indicado.
¿Donde has visto un SELECT que no indique campos, al menos en forma general (*)? No existe eso.

Lo mires por donde lo mires, esa consulta simplemente no funcionará y te devolverá error de sintaxis.
Siempre.

Para resolverlo:
1) Si quieres los resultados de la primera y agregados los de la segunda, ambas consultas deben unirse con UNION y deben invocar la misma cantidad de campos, del mismo tipo y en el mismo orden.

2) Si cada registro de la primera está relacionado con uno o más de la segunda tabla, debes usar JOIN, indicando qué campo de la primera se relaciona con qué campo de la segunda. Para eso necesitamos saber cómo es la estructura y relaciones de ambas tablas.

El primer caso sería:
Código MySQL:
Ver original
  1. SELECT DISTINCT`post_title`
  2. FROM `wp_posts`
  3. WHERE post_status = 'publish'
  4. SELECT post_title
  5. FROM wp_custom_post_fields
  6. WHERE site_title = 'Todos los discos'
  7. ORDER BY post_date DESC

El segundo sería mas o menos:
Código MySQL:
Ver original
  1. SELECT DISTINCT wp.post_title, wf.camposegundatabla
  2. FROM `wp_posts` wp INNER JOIN wp_custom_post_fields wf ON wp.campoFK = wf.campoPK
  3. WHERE post_status = 'publish' AND  wf.site_title = 'Todos los discos'
  4. ORDER BY post_date DESC

Por supuesto, necesitamos mejor información para saber lo que hay que escribir, pero lo que te muestro ya te puede dar una idea de lo mal escrita que está tu consulta...

Suerte.



PD: Una sugerencia. Descarga el MySQL Workbench de la web oficial de MySQL y usalo para escribir las consultas. Tiene un analizador sintáctico que te marcará los errores que existan, lo que te evitará por lo menos este tipo de contingencias.

Y usa el manual de referencia. Nadie conoce todo (no, tampoco nosotros), y todos usamos los manuales. Hasta los DBA con titulo y 20 años de experiencia... (yo no tengo tantos, pero tengo bastantes)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 01/05/2013 a las 07:32
  #5 (permalink)  
Antiguo 01/05/2013, 09:25
lucasabogado
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Consulta a dos Tablas

Os juro que es la primera vez que me meto con msql y sinceramente no tengo ni puñetera idea es más no tengo ni puñetera idea de como formular ni siquiera la pregunta solo sé que cuando escribo esto :

$sRequest = " SELECT DISTINCT`post_title` FROM `wp_posts` WHERE post_status = 'publish' ORDER BY post_date DESC ";

funciona correctamente

creo que es la tabla wp-post de la que extraigo el titulo el cual esta publicado

y en la segunda es la tabla sería mas o menos así :

esta sola tambien me funciona correctamente

$sRequest = " SELECT `meta_key` FROM `wp_postmeta` WHERE meta_value = 'alquiler' ";

con lo cual el resultado de estas dos quisiera juntarlas para un solo resultado


sería esto ???

SELECT DISTINCT`post_title`
FROM `wp_posts`
WHERE post_status = `publish`

AND

SELECT `meta_key`
FROM 'wp_postmeta'
WHERE meta_value = `alquiler`
ORDER BY post_date DESC


tampoco se la diferencia entre apóstrofes y comillas como en primera pregunta tenia apóstrofes y comillas y me funcionaba lo di por correcto


muchas gracias
  #6 (permalink)  
Antiguo 01/05/2013, 09:39
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, 4 meses
Puntos: 2658
Respuesta: Consulta a dos Tablas

En serio... ¿Leíste algo de lo que dije?

Esto:
Código MySQL:
Ver original
  1. SELECT DISTINCT`post_title`
  2. FROM `wp_posts`
  3. WHERE post_status = `publish`
  4.  
  5.  
  6. SELECT `meta_key`
  7. FROM 'wp_postmeta'
  8. WHERE meta_value = `alquiler`
  9. ORDER BY post_date DESC

No funciona porque está mal escrito.

Y te acabo de explicar punto a punto por qué está mal escrito y no te va a funcionar.

Ahora bien, si como dices no tienes la más "puñertera" idea (te sugiero que moderes las expresiones, porque aquí participan de distintos países y no todo es correcto para todos), si no tienes ni idea, desde ya va a ser complicado ayudarte. Te sugiero antes de seguir avanzando que veas como mínimo en un manual básico de SQL los dos temas:
JOIN (Articulo JOIN en Wikipedia) y UNION (UNION en Manual de referencia MySQL).
SIn una noción básica de SQL, todo lo que te podamos argumentar te sonará a galimatías.

Entiende que si estás programado, y necesitas usar consultas a bases de datos, como minimo se espera que conozcas las reglas básicas de SQL. De lo contrario será un problema tras otro, hasta que lo aceptes.
__________________
¿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 01/05/2013, 09:48
lucasabogado
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Consulta a dos Tablas

Solo queria resolver este pequeño problema NO ir a la Universidad ademas ya no tengo edad para eso

El niño : Papá te puedo hacer una pregunta ?

El Padre : Pregunta pregunta si nó cómo vas a aprender !!

Simple y llanamente es lo que yo quería además yo expongo una pregunta desde mi país y me da completamente igual si una palabra que aquí suena bien a los demás no les guste

V.LUCAS
  #8 (permalink)  
Antiguo 01/05/2013, 12:13
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, 4 meses
Puntos: 2658
Respuesta: Consulta a dos Tablas

Cita:
Solo queria resolver este pequeño problema NO ir a la Universidad ademas ya no tengo edad para eso
El tema no es ir a la universidad, sino que si te vas a meter a desarrollar cosas que requieren un mínimo de conocimientos de cierto tema, tienes dos opciones: O te capacitas, o lo encargas a otro.
Y lo de la edad es un pretexto. En la facultad tuve compañeros de 65 años...

Respecto a tu problema puntual, te recuerdo que el sentido de FDW es guiar para que puedas solucionar las cosas, pero no te regalaremos la solución. ´TE ayudaremos a entenderla y que lo puedas hacer.
En el caso de tu consulta, ya te dije y expliqué por qué está mal y cómo debes hacer para resolverla. No te puedo dar una mejor consulta porque no nos has dicho qué relaciones hay entre las dos tablas, y esa relación no se puede deducir de la consulta mal escrita que intentas hacer.
Y sin esa info....

No puedo estar seguro en este punto si la solución que buscas:

1) Existe (bien podría ser que intentes juntar caballos con manzanas).
2) Es un JOIN.
3) Es un UNION.

Ergo, sin que nos des una mejor información respecto a qué relación hay entre ambas consultas, no hay muchas alternativas.

Cita:
yo expongo una pregunta desde mi país y me da completamente igual si una palabra que aquí suena bien a los demás no les guste
Te recuerdo lo siguiente (Políticas de Uso):
Cita:
1.1 El hecho de ignorar o desconocer las normas y políticas de Foros del Web, no exime a ningún usuario de su cumplimiento. Es obligación de todos los usuarios leer y adherirse a las normas aquí descritas y a las especificadas en cualquier otro foro, tema o categoría.
y además:
Cita:
2.10 Los usuarios deben usar un lenguaje cortés, respetuoso y gentil. (...)
Aunque a estas alturas, con 4 años de suscripto y más de 140 mensajes, supongo que ya debes saberlo.
__________________
¿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 01/05/2013, 14:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta a dos Tablas

lucasabogado,
lo que queremos es ayudarte, de verdad, y los consejos de gnzsoloyo son los correctos y las preguntas las adecuadas. No podremos ayudarte sin saber cuál es la relación entre las tablas. Me explicaré:
Tú escribes dos consultas select (he corregido parte del texto para que no te cause error, pero eso que parece ser una descripción no ayuda, porque no sabemos a qué se refiere), y yo entiendo que en la primera parte de la consulta pareces querer sacar los distintos títulos de posts de la tabla wp_posts cuyo estatus es publish. Bien, pero no entiendo bien qué datos hay en la tabla wp_postmeta, qué es ese campo meta_key, y sobre todo qué relación hay entre wp_posts y wp_postmeta. Si no nos aclaras eso no podremos concretarte si necesitas un INNER JOIN, LEFT JOIN, UNION o qué para unir los datos de esas tablas. Cuéntanos algo sobre los datos de esas tablas y la estructura de las mismas y sus relaciones, si es que las hay.

SELECT DISTINCT post_title
FROM wp_posts
WHERE post_status = 'publish'

AND

SELECT meta_key
FROM wp_postmeta
WHERE meta_value = 'alquiler'
ORDER BY post_date DESC

Etiquetas: select, sql, tabla, tablas
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 19:13.