Foros del Web » Programando para Internet » PHP »

Evitar repetir salida en base de datos

Estas en el tema de Evitar repetir salida en base de datos en el foro de PHP en Foros del Web. Buenas! Como verán soy nuevecillo por aqui, llevo poquito tiempo en este mundillo y ando un poquito verde aun , espero puedan resolverme una duda. ...
  #1 (permalink)  
Antiguo 29/10/2007, 13:18
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Evitar repetir salida en base de datos

Buenas!
Como verán soy nuevecillo por aqui, llevo poquito tiempo en este mundillo y ando un poquito verde aun , espero puedan resolverme una duda.

Estoy trabajando con bases de datos mysql ,y necesito saber como hacer para que al hacer una consulta , si el campo este repetido , solo se muestre una vez.

He visto que mediante el shell , estan los comandos UNIQUE y DISTINCT pero estos sobre php no me funcionan, ¿alguna solucion o algun comando que desconozca?

Gracias de antemano por vuestro tiempo :).
  #2 (permalink)  
Antiguo 29/10/2007, 13:46
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Evitar repetir salida en base de datos

Mmm... porque no te funciona el DISTINCT en php ??... como estas construyendo la consulta ??

Podrias poner tus php aca para ver en que podemos ayudarte.

Gracias!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 29/10/2007, 13:50
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 17 años, 5 meses
Puntos: 3
Re: Evitar repetir salida en base de datos

Hola shilen79, a ver, vamos por partes.

Si estas empezando en este mundillo, te recomiendo que estudies primero acerca del modelamiento de bases de datos, y estudies como se diseña una base de datos, los tipos de datos y la estructura en general.

Investiga sobre consistencia de datos e integridad, te ahorrará dolores de cabeza futuros.

Ahora, es extraño que tengas filas repetidas, no debería pasar, excepto si la tabla que consultas, hace referencia a otra tabla medieante un identificador, en caso contrario, tienes redundancia de datos, y eso es un problema.

Yo cuando necesito hacer una consuta por campos distintos uso la claúsula DISTINCT y me funciona a la perfección.

por ejemplo:

Tengo una tabla de productos:

Id |descripcion
01 harina
02 leche
03 azúcar
04 huevos

y una tabla de ventas:

idventa | id
01 01
01 01
01 02
01 03
02 02
02 03

Donde idventa es el identificador de la venta e id es el identificador del producto, en este caso podemos decir que en la venta 01, se vendieron 2 paquetes de harina, 1 caja de leche y una bolsa de azucar.

Para no mostrar 2 veces la harina en la venta 01, nuestra consulta sería la sgte:

SELECT DISTINCT * Id FROM Ventas WHERE Idventa = 01

Esa es la forma de usar el distinct, debes ejecutarla en tu php como cualquier otra consulta.

Espero te sirva, Adios
  #4 (permalink)  
Antiguo 29/10/2007, 15:30
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Re: Evitar repetir salida en base de datos

Buenas!!!

Lo primero, gracias por contestar tan rápido :D.

Creo que no me explique muy bien , tipico en mi . Intentare explicarme mejor:

Tengo una base de datos, donde una tabla se llama HP_Properties(es de un componente de un CMS donde almacenas diferentes inmuebles). Dentro de esa tabla , tiene los siguientes campos :
nombre, ciudad, provincia , etc...

El cliente puede agregar propiedades, poniendo sus caracteristicas y estas se van añadiendo como registros a la tabla de la base de datos .

Yo necesito hacer un formulario de búsqueda usando como opcion , las distintas ciudades, y al pinchar, salgan todas las propiedades de esa ciudad.

Yo he hecho una consulta :
$database->setQuery( "SELECT * FROM #__hp_properties AS t"
. "\nWHERE t.published='1'"
. "\nORDER BY t.type ASC");
$cities = $database->loadObjectList();

¿Que sucede con esto?
Que cuando el cliente va añadiendo propiedades(inmuebles), si repite una ciudad, en la tabla hp_properties habra 2,3,etc campos "ciudad" con el valor "madrid" por ejemplo.

Al hacer la consulta, y hacer el formulario mediante <option> para que me salgan las diferentes ciudades y el usuario pinche en una, y le salgan las propiedades asociadas a esa ciudad, las ciudades me salen repetidas tantas veces como repetido este en los campos de la tabla.

Probé ayer:
$database->setQuery( "SELECT DISTINCT FROM #__hp_properties AS t"
. "\nWHERE t.published='1'"
. "\nORDER BY t.type ASC");
$cities = $database->loadObjectList();

Pero no me realizaba la consulta, pues no me aparecian las ciudades, no se si habia de meterle un WHERE, para ponerle filtros , porque esto lo encontre con comandos bajo shell, y venia un ejemplo muy simple.

Bueno ,antes apenas me explique y ahora menudo rollo he soltado.

Espero me puedan ayudar, porque estoy seguro que es una tonteria, pero he mirado por bastantes sitios y no se que instruccion,comando me falta para hacer lo que quiero que debe ser algo muy tipico en si....

Gracias :)
  #5 (permalink)  
Antiguo 29/10/2007, 15:42
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Evitar repetir salida en base de datos

Ok... al hacer DISTINCT sin valores lo que tratara el mysql es buscar el registro que sea igual en esa tabla... si tienes 10000 registros y ni uno es igual a otro en su totalidad (nombre, apellido o lo que sea, etc...) no traera nada.

Si quieres identificar a las ciudades haz un DISTINCT ciudad y ve si te resuelve el problema ;)

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 30/10/2007, 03:50
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Re: Evitar repetir salida en base de datos

Muchas gracias Marvin :D.
A medida que iba leyendo me imaginaba lo que me ibas a decir . Realmente mas que no poder haberlo visto por mi mismo , creo que fue la sobresaturacion de ayer que no me dejaba ver ya mas.

Espero no abusar, pues espero poder aprender bastante para no ser un mero usuario que solo pregunta sin dar nada a cambio , pero realmente toda esta parte del formulario de busqueda me esta dando problemas.

Nunca habia tenido que hacer ninguno , y encima para colmo no es uno que hago desde 0, sino que es una modificacion de un modulo del hot_property del Joomla, y prefiero mil veces hacer una cosa de 0 que modificar ya existentes porque cada uno tiene su metodo.

Bueno la cuestion es que tengo lo siguiente:

//aqui es donde propuse el error que corregire cuando solucione el importante que cito a continuacion.
Aqui hago la consulta para coger todos los campos de la tabla , cogiendo solo los publicados.

$database->setQuery( "SELECT * FROM #__hp_properties AS t"
. "\nWHERE t.published='1'"
. "\nORDER BY t.id ASC");
$cities = $database->loadObjectList();

//Essta parte de abajo es solo para determinar si el componente(la aplicacion) esta publicada.


$database->setQuery("SELECT id FROM #__menu"
. "\nWHERE link='index.php?option=com_hotproperty'"
. "\nLIMIT 1");
$Itemid = $database->loadResult();

//<form action="<?php echo $mosConfig_live_site ?>/index.php" method="POST">
<select name="id" class="inputbox" size="1" onChange="submit()">
<option value="0"><?php echo "selecciona provincia" ?></option>
<?php
foreach($cities AS $a) { ?>
<option value="<?php echo $a->id; ?>"><?php echo $a->suburb; ?></option>
<?php }
?></select>
<input type="hidden" name="option" value="com_hotproperty" />
<input type="hidden" name="task" value="viewagent" />
<input type="hidden" name="Itemid" value="<?php echo $Itemid ?>" />
</form>

Ese es el fomulario, que en un principio estaba hecho para buscar los agentes.
Entiendo que el form action , me manda al index.php, me sale la seleccion de provincias... pero no entiendo como se hace para que te haga la busqueda de esa "palabra" que tienes seleccionada.

Como vereis seleccione viewagent, en rojo, es un valor que si cambio no funciona el modulo (no busca nada) , he buscado referencias de viewagent en otros archivos pero nada... y es que realmente no entiendo muy bien como se realiza la busqueda, si el task hace algo o no ... vamos que ando perdido con el formulario como se pone en marcha bien.

He mirado por internet sobre formulario, pero siempre sale lo basico y normalmente con un form_caption a otro archivo que es donde se procede a ejecutar el script, pero aqui no veo que sea asi porque el index.php general del Joomla es un archivo global... no viene referenciado nada del componente este en cuestion ni nada de mostrar busquedas.. no se... si me explico ..

Espero que me puedan ayudar porque me esta sacando loco esto, normalmente dispongo de mas tiempo para poder mirar mas detalladamente el problema, pero ando mal de tiempo esta vez y creo que el agobio tambien me hace no ver claro las cosas.
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 14:05.