Foros del Web » Programando para Internet » PHP »

Muy complicado para mi, consultas mysql avanzadas

Estas en el tema de Muy complicado para mi, consultas mysql avanzadas en el foro de PHP en Foros del Web. Hola amigos, tengo un problema :(, tengo una web donde muestro las provincias y junto a estas los registros de mis usuarios de esa provincia, ...
  #1 (permalink)  
Antiguo 13/06/2004, 16:36
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Muy complicado para mi, consultas mysql avanzadas

Hola amigos, tengo un problema :(, tengo una web donde muestro las provincias y junto a estas los registros de mis usuarios de esa provincia, para que eso se vea he creado una funcion que hace una consulta y cuenta los registros de esa provincia, pero quiero que con un select esos resgistros sean por sexo, osea que en vez de mostrar en alicante (10) pues si eliges mostrar chicas apareceria alicante (6) y si cambiaras a chicos Alicante (4)
os pongo mi funcion para que veais como lo he hecho pero el resto no me sale.
(sin la variable $sex puedo ver los registros de cada provincia el problema es cuando quiero que sea por sexo)

Código PHP:
function tiene($pro,$sex){
$sql = "SELECT provincia1, genero from dr_anuncio WHERE act='1', provincia1='$pro', genero='$sex' order by id DESC";
$res = mysql_query ($sql) or die (mysql_Error());
$num=mysql_num_rows($res); 
    if (!$num==''){
    echo "$num";
    }else{
    echo "0";
    }
}

//este es el select
<select name="genero" size="1" onChange="top.location.href=this.options[this.selectedIndex].value">
<option selected value="busqueda.php?sex=Chica">Chicas</option>
<option value="provincias.php?sex=Chico">Chicos</option>
</select>

// Esto es como se muestra en las provincias
<a class="negro" href='busqueda.php?pro=4' >Alicante</a> (<? tiene(4?>)</td>
Os agradeceria vuestra ayuda ;)
__________________
Seguro que ahora me sale mejor!
  #2 (permalink)  
Antiguo 14/06/2004, 04:54
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
help!!
__________________
Seguro que ahora me sale mejor!
  #3 (permalink)  
Antiguo 14/06/2004, 11:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pon el modelo de datos de tu BD y algunos datos de ejemplo para hacer una idea de como trabaja tu BD (por si está mal diseñada por ejemplo ..)

Un saludo,
  #4 (permalink)  
Antiguo 14/06/2004, 12:42
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Cita:
Iniciado por Cluster
Pon el modelo de datos de tu BD y algunos datos de ejemplo para hacer una idea de como trabaja tu BD (por si está mal diseñada por ejemplo ..)

Un saludo,
No se si te refieres a la estructura de la base de datos pero te la pongo aki.

Código PHP:
#
# Estructura de tabla para la tabla `dr_anuncio`
#

CREATE TABLE `dr_anuncio` (
  `
idint(11NOT NULL auto_increment,
  `
actsmallint(2NOT NULL default '1',
  `
fechadate NOT NULL default '0000-00-00',
  `
nombrevarchar(150NOT NULL default '',
  `
textotext NOT NULL,
  `
generovarchar(25NOT NULL default '',
  `
edadvarchar(25NOT NULL default '',
  `
me_alturavarchar(25NOT NULL default '',
  `
pelovarchar(25NOT NULL default '',
  `
ojosvarchar(25NOT NULL default '',
  `
tel1varchar(15NOT NULL default '0',
  `
tel2varchar(15) default NULL,
  `
provincia1varchar(80NOT NULL default '',
  `
provincia2varchar(80NOT NULL default '',
  `
idiomasvarchar(150) default NULL,
  `
emailvarchar(80) default NULL,
  `
urlvarchar(80) default NULL,
  `
dis_hora1varchar(10NOT NULL default '',
  `
dis_hora2varchar(10NOT NULL default '',
  `
dis_24varchar(10) default '0',
  `
dis_dia1varchar(10NOT NULL default '',
  `
dis_dia2varchar(10NOT NULL default '',
  `
dis_todochar(2) default '0',
  `
dis_aparvarchar(25) default '0',
  `
dis_hotelvarchar(25) default '0',
  `
dis_viajevarchar(25) default '0',
  `
ser1char(2) default '1',
  `
ser2char(2) default '0',
  `
ser3char(2) default '0',
  `
ser4char(2) default '0',
  `
ser5char(2) default '0',
  `
ser6char(2) default '0',
  `
ser7char(2) default '0',
  `
ser8char(2) default '0',
  `
ser9char(2) default '0',
  `
tar_1varchar(5) default NULL,
  `
tar_2varchar(5) default NULL,
  `
tar_3varchar(5) default NULL,
  `
tar_4varchar(5) default NULL,
  `
tar_5varchar(5) default NULL,
  `
nuevoNombre1varchar(50) default NULL,
  `
nuevoNombre2varchar(50) default NULL,
  `
nuevoNombre3varchar(50) default NULL,
  `
nuevoNombre4varchar(50) default NULL,
  `
destacachar(2NOT NULL default '1',
  `
tiempovarchar(4NOT NULL default '30',
  
PRIMARY KEY  (`id`)
TYPE=MyISAM AUTO_INCREMENT=39 
__________________
Seguro que ahora me sale mejor!
  #5 (permalink)  
Antiguo 14/06/2004, 13:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok,

Usa un formulario para meter tu <select> .. ahí con campos hidden propaga el resto de variables que necesites (supongo que ese "pro" que define la provincia);

Código PHP:
<form action="<? echo $_SERVER['PHP_SELF'?>" method="GET">
<input type="hidden" name="pro" value="<? echo $_GET['pro'?>">
<select name="sex" size="1" onChange="this.submit()"> 
<option selected value="Chica">Chicas</option> 
<option value="Chico">Chicos</option> 
</select> 
</form>
El "submit" automático ante el evento de javascript "onChange" no sé si será así exactamente (confirmalo en el foro de javascript) .. Pero la idea es: un simple formulario -> montar las variables que se tengan que "propagar" en campos hidden -> usar el método adecuado (GET en tu caso al parecer).

Todo esto se podría hacer integramente en javacript tomando las variables que necesites para componer tus URL .. pero .. creo que es más intuitivo hacerlo así.

Un saludo,
  #6 (permalink)  
Antiguo 14/06/2004, 16:10
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Estoy a al espera de ver como se hace lo del select que yo de js nada.
este es el erroe ke me aparece en la web:
Warning: Missing argument 2 for tiene() in /usr/local/psa/home/vhosts/creactiva.net/httpdocs/secciones/includes/funciones.php on line 4
la linea 4 que es concretamente:
function tiene($pro,$sex){
NO se si esto ayuda o es solo consecuencia de la falta del parametro :S
__________________
Seguro que ahora me sale mejor!
  #7 (permalink)  
Antiguo 14/06/2004, 17:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tu función tiene() .. le pasas dos parámetros (mejor dicho tiene dos parámetros obligados) .. y cuando la usas en:

<a class="negro" href='busqueda.php?pro=4' >Alicante</a> (<? tiene(4) ?>)</td>

Sólo le pasas 1 .. el primero: tu "$pro" te falta el $sex o bien defines en tu función un parámetro por defecto si no se indica ninguno . .ejemplo:

function tiene($pro,$sex="Chico"){

así si no pasas $sex al usar tu función como parámetro .. se tomará por defecto el valor "Chico" para $sex.

Un saludo,
  #8 (permalink)  
Antiguo 14/06/2004, 17:52
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
ahora me da este error:
You have an error in your SQL syntax near ' provincia1='1', genero='Chica' order by id DESC' at line 1
y la funcion he puesto esto:
function tiene($pro,$sex="Chica"){

el sql si que pilla la variable...

Gracias por tu ayuda
__________________
Seguro que ahora me sale mejor!

Última edición por benti; 14/06/2004 a las 17:55
  #9 (permalink)  
Antiguo 15/06/2004, 03:26
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
He preguntado en el Foro de bases de datos y emhan dicho que pruebe esto:
Código PHP:
$res mysql_query ("SELECT id, provincia1, genero from dr_anuncio WHERE act='1', 
Pero ahora em aparece este error:
in /usr/local/psa/home/vhosts/creactiva.net/httpdocs/secciones/includes/funciones.php on line 11

Código PHP:
function tiene($pro,$sex="Chica"){ 
$res mysql_query ("SELECT id, provincia1, genero from dr_anuncio WHERE act='1', provincia1='$pro', genero='$sex' order by id DESC"); 
$num=mysql_num_rows($res);  // esta es la linea 11 
    
if (!$num==''){ 
        echo 
"$num"
    }else{ 
        echo 
"0"
    } 

__________________
Seguro que ahora me sale mejor!
  #10 (permalink)  
Antiguo 15/06/2004, 03:40
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Imagino que tb habra que pasarle a la function tiene(); el valor de $sex para que muestre los que hay en cada provincia por ese tipo.
Código PHP:
<a class="negro" href='busqueda.php?pro=4' >Alicante</a> (<? tiene(4,$_GET['sex']) >)
Mira he subido la web para que podais verlo a ver si eso ayuda:
http://www.creactiva.net/derelax/sec...provincias.php
__________________
Seguro que ahora me sale mejor!

Última edición por benti; 15/06/2004 a las 03:41
  #11 (permalink)  
Antiguo 15/06/2004, 07:35
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Bien he añadido esto enla pagina:
Código PHP:
if ($_GET['sex']==''){
    
$sex="Chica";    

y en la fuction he cambiado a:
Código PHP:
function tiene($pro,$sex){
$res mysql_query ("SELECT id, provincia1, genero FROM dr_anuncio WHERE act='1', provincia1='$pro', genero='$sex' order by id DESC") or die (mysql_Error()); 
Paro ahora me da este error, ya no se ke hacer :
You have an error in your SQL syntax near ' provincia1='1', genero='Chico' order by id DESC' at line 1
__________________
Seguro que ahora me sale mejor!
  #12 (permalink)  
Antiguo 15/06/2004, 07:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te hace falta con urgencia leer sobre el SQL (lenguaje estructurado de consulstas) ..

(esto sería para explicar en el foro de Base de datos . .pero ..)

Cuando tu dices:

"SELECT campos FROM tablas WHERE condiciones"

estás diciendo:
"Selecciona (SELECT) esos campos de (FROM) la tabla(s) que se mencionan y bajo la condición (WHERE) campo=valor .. si hay más condiciones tienes que usar operadores "LOGICOS!" .. AND, OR .. pero no una "coma" .. ¿que debe entender si le pones una coma ? que será AND? .. bueno, como eso mismo no lo va a intentar adivinar para eso existen los OPERADORES lógicos ..

más info en:
www.mysql.com

Un saludo,
  #13 (permalink)  
Antiguo 15/06/2004, 07:58
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Lo revisare, pero ese mi primera web con PHP y aun me lio con muchas cosas.
Gracias ;)
__________________
Seguro que ahora me sale mejor!
  #14 (permalink)  
Antiguo 15/06/2004, 09:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
benti ..

El problema no es que sea tu prímera página en PHP .. sino que debes saber que no sólo estás trabajando con "PHP" sino con "Base de datos" .. (ademas de tu HTML/javascript .. etc ). Las base de datos tienen su própio lenguaje de programación y eso no depende de PHP ni es PHP el único que maneja "Mysql" ambos son independientes y grácias a las funciones de PHP nativas tipo: mysql_xxxx() son las que usas desde PHP para "comunicarte" con esa Base de datos: hacer consultas SQL y obtener resultados de esas consultas.

Lo principal en "PHP" (más bien dicho en un lenguaje de programación del lado del servidor) es identificar que cosa es de "PHP" . que cosa es de "tu base de datos" .. cual es cosa del "cliente" (HTML/javascript/CSS .. etc) y otros. Cuanto mejor sepas que hace cada cosa y como se "comunican" entre ellas mejor te irá.

Te recomiendo leer sobre SQL y temas afines (orientados a Mysql que es lo que usas actualmente en):

www.mysql-hispano.com

Un saludo,
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 13:17.