Foros del Web » Programando para Internet » PHP »

Consultas y subconsultas

Estas en el tema de Consultas y subconsultas en el foro de PHP en Foros del Web. Buenas a todos; Lo que pretendo hacer es una comparacíon entre varios resultados obtenidos de unas consultas; esto es: Realizo la consulta 1ª (select * ...
  #1 (permalink)  
Antiguo 31/10/2003, 12:37
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Consultas y subconsultas

Buenas a todos;

Lo que pretendo hacer es una comparacíon entre varios resultados obtenidos de unas consultas; esto es:

Realizo la consulta 1ª (select * from...) y obtengo:

· Verde
· Naranja
· Azul

Posteriormente realizo la 2ª consulta y obtengo:

· Rojo
· Negro
· Azul
· Gris

Y lo que necesito es comparar ambos resultados obtenidos para saber si hay alguno que coincide entre ellos (como es el caso del Azul en el ejemplo).

¿Cómo realizo esto en PHP?

Gracias

PD: Puse este tema en el foro de BASES DE DATOS pero quizá corresponda mejor en PHP
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 31/10/2003, 14:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Debes indicar que Base de datos usas .. Suponemos que ¿Mysql? ... te lo comento por qué por ejemplo Mysql no tiene sub-consultas (por lo menos no se hacen igual que en el resto).

La técnica "PHP" sería hacer tu consulta "maestra" (padre .. la principal) y hacer un "WHERE .." en la segunda tabla ..

Código PHP:
$sql="SELECT * FROM tabla"
$resultado1=mysql_query($sql);
while (
$row=mysql_fetch_array($resultado1)){

$dato=$row['campo'];
$sql2="SELECT COUNT(*) FROM tabla2 WHERE campo='$dato'";
$resultado2=mysql_query($sql2);
$coincide=mysql_result($resultado2,0);

if (
$coincide 0){
   echo 
$row['campo']. " Se repite en la tabla2";
   
// Aquí veras tu que haces si se repite .. 
}

Como veras .. la solución no es de lo más optimo ..

Usando SQL sólo.. podría ser algo tipo:

SELECT campo.tabla1,campo.tabla2 WHERE tabla1,tabla2 WHERE campo.tabla1=campo.tabla2

Así tendrías los campos que son iguales en ambas tablas .. con ese resultado puedes aplicar tu while() tipico y procesar cada registro si corresponde ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 03/11/2003, 04:32
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
No he utilizado mucho el mysql_result, ya que por ahora siempre me ha servido el mysql_fetch_array. A sabiendas de que puedo ir al manual de MySQL, ¿puedes decirme qué uso tiene el "0" de mysql_result($resultado2,0);?

Gracias!!
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #4 (permalink)  
Antiguo 03/11/2003, 04:51
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

mysql_fetch_* lee el siguiente registro. mysql_result() te permite leer el registro (fila) que quieras. Ese 0 es para indicar la primera fila. En el manual viene mas info.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 03/11/2003, 04:53
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Y así todo no me valdría, ya que lo que hago es realizar dos consultas a la misma tabla, osease:

select COLOR from MIS_COLORES_FAVORITOS where MIS_GUSTOS = 'Pepe'

Obtengo resultados y luego:

select COLOR from MIS_COLORES_FAVORITOS where MIS_GUSTOS = 'Rosa'

Y ahora poder ver si pepe y rosa tienen algún color favorito coincidente. (Qué bonito ejemplo me ha salido )
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #6 (permalink)  
Antiguo 03/11/2003, 04:58
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
Cita:
Mensaje Original por Cluster
Usando SQL sólo.. podría ser algo tipo:

SELECT campo.tabla1,campo.tabla2 WHERE tabla1,tabla2 WHERE campo.tabla1=campo.tabla2

Así tendrías los campos que son iguales en ambas tablas .. con ese resultado puedes aplicar tu while() tipico y procesar cada registro si corresponde ..

Un saludo,

creo que Cluster ya te dio la respuesta

mira, mas info sobre mysql, te comento que es super-importante saber igual de php como de mysql, ya que ahorramos monton de lineas de code, y bueno, las consultas son mas rapidas y demas.

http://www.mysql.com/doc/en/
__________________
3w.valenciadjs.com
3w.laislatv.com
  #7 (permalink)  
Antiguo 03/11/2003, 05:12
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
Hola.
Lo que quieres hacer se puede hacer bastante sencillo con un sql, pues aunque las consultas son todas sobre la misma tabla, tú puedes cruzar una tabla consigo misma de la siguiente manera:
Código PHP:
select a.COLOR
from MIS_COLORES_FAVORITOS a
MIS_COLORES_FAVORITOS B
 where a
.MIS_GUSTOS 'Pepe' and b.MIS_GUSTOS="Rosa"
  
and a.COLOR=b.COLOR 
Esta select te devuelve los colores que tienen en común Rosa y Pepe.
Si quieres puede hacerlo definiendo el inner join:
Código PHP:
select a.COLOR
from MIS_COLORES_FAVORITOS a
inner join MIS_COLORES_FAVORITOS B  on a.COLOR=b.COLOR
 where a
.MIS_GUSTOS 'Pepe' and b.MIS_GUSTOS="Rosa" 
Un saludo.
  #8 (permalink)  
Antiguo 03/11/2003, 05:25
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Muchas gracias, es justo lo que buscaba!!!! Genial
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #9 (permalink)  
Antiguo 03/11/2003, 09:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
ferent .. Ya aprendistes algo más:

No todo es "PHP" .. hay "SQL" xDD .. así que para próximas preguntas intenta primero definir ( o localizar) si tu problema es más bien con PHP o es SQL y en tal caso podrás preguntar mejor en el foro de "Base de datos" por ejemplo ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 03/11/2003, 10:29
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Consultas y subconsultas

Cita:
Mensaje Original por ferent

PD: Puse este tema en el foro de BASES DE DATOS pero quizá corresponda mejor en PHP [/B]
Desgraciadamente el foro de base de datos anda algo dormido. De hecho, hoy, despues de 4 días por fin me han contestado.

En cosas que me urgan menos les aseguro que no les asediaré con mis preguntas.

Un saludo y gracias por su comprensión.
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #11 (permalink)  
Antiguo 03/11/2003, 10:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, ferent .. pero comprende que en forosdelweb.com hay un foro para casi toto ..así que no es cosa de tus urgencias sino de organización, por ende, los moderadores (según sus normas de uso y políticas del foro) nos reservamos el derecho de mover preguntas que no correspondan de foro en cualquier momento.

Si bien en el foro "PHP" se dá mucha "manga ancha" a preguntas de SQL (sobre Base de datos extrictamente SQL) (yo mismo respondo preguntas de SQL aquí, no doy el ejemplo).. Todos deberíamos preguntar en el foro que corresponda .. y los que dominen SQL que se pasen por ese foro a responder.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 03/11/2003, 10:44
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Como siempre Cluster, y ya voy para mis 400 mensajes, estoy plenamente deacuerdo contigo. No me quiero ni imaginar lo tedioso que debe ser tener que decir a cada forero-novato que pregunten en su foro, o que consulten las benditas FAQS antes de realizar alguna consulta.

Mis más sinceras disculpas, pero supongo que ya sabes la de dolores de cabeza que provoca estar a punto de conseguir algo y que por una sentencia SQL no salga adelante.

Yo dedico bastante tiempo al día en el estudio de PHP y MySQL (si no no comería), aunque sinceramente considero despues de este tiempo, que MySQL requiere mucho más de cabeza que de estudio, ya que las posibles variables en los query es casi infinito, y a veces hace falta el empujón de gente tan buena en esto como tú.
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
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 02:06.