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

select distinct

Estas en el tema de select distinct en el foro de Mysql en Foros del Web. es posible hacer un select distinct de un campo al que solo quiero que se analice una parte del texto?? Me explico Un ejemplo de ...
  #1 (permalink)  
Antiguo 04/11/2008, 06:31
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
select distinct

es posible hacer un select distinct de un campo al que solo quiero que se analice una parte del texto??

Me explico

Un ejemplo de registros sería
campo1
===========================
oficial de marina, blanco
oficial de marina, azul claro
capitan de tierra, marrón talla 4
capitan de tierra, marrón talla 6

solo quiero que saque los registros:

oficial de marina
capitan de tierra

es decir que analice el distinict solo hasta la coma y aplicar el distinct, porque si aplico el distinct directamente me saca los 4 registros.

Evidentemente no sirve con
SELECT DISTINCT campo1 FROM tabla
pues me saca los 4 registros


gracias

Última edición por intergus; 04/11/2008 a las 06:45 Razón: mejorar la pregunta
  #2 (permalink)  
Antiguo 04/11/2008, 06:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: select distinct

oficial de marina, blanco
oficial de marina, azul claro
capitan de tierra, marrón talla 4
capitan de tierra, marrón talla 6

En el ejemplo que mandas es fàcil ya que la coma esta en la misma posición en los dos casos (digito 18) luego


Select distinct left(nombreCampo, 17) from nombreTabla

Pero claro para

soldado raso, caqui

No te funcionará.... y en general si la coma no esta siempre en el mismo lugar...

En este caso deberas usar lo siguiente

Select distinct left(nombreCampo, instr(nombreCampo,",")-1) from nombreTabla

Del manual de MySQL


Cita:
LEFT(str,len)

Returns the leftmost len characters from the string str, or NULL if any argument is NULL.

mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'



INSTR(str,substr)

Returns the position of the first occurrence of substring substr in string str. This is the same as the two-argument form of LOCATE(), except that the order of the arguments is reversed.

mysql> SELECT INSTR('foobarbar', 'bar');
-> 4
mysql> SELECT INSTR('xbar', 'foobar');
-> 0
This function is multi-byte safe, and is case sensitive only if at least one argument is a binary string.

Quim
  #3 (permalink)  
Antiguo 04/11/2008, 07:07
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: select distinct

Muchas gracias por responder, desconocía que se pudiera hacer, por eso ni miré en el manual

No obstante algo debe fallar pues no funciona

Hay registros que no contienen nada, registros donde no habrá ninguna coma, esos debería sacarlos tal cual pero poniendo como me indicas, no saca nada

ummmm sigo probando pues será alguna tontería, ya sabiendo que puede hacerse....

  #4 (permalink)  
Antiguo 04/11/2008, 07:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: select distinct

Es normal que no saque nada, puesto que la coma no esta.... tendras que usar un condicional que mire si hay coma y sacar una cosa u otra....

Mira la sintaxis del if en el manual


if (instr(nombreCampo,",")=0, nombreCampo, left(nombreCampo, instr(nombreCampo,",")-1))

instr(nombreCampo,",") no se si sera 0 o nulo...

algo asi

Quim
  #5 (permalink)  
Antiguo 04/11/2008, 07:30
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: select distinct



Era una cuestión de añadirle un "as C1" e imprimir el campo C1 tras la consulta.

$sql="SELECT DISTINCT left(campo1, instr(campo1,\",\")-1) as C1 FROM tabla order by campo1";

Muchas gracias

Ya por rizar el rizo sería posible poner varios caracteres, por ejemplo una coma ',' un punto y coma ';' o un 'º' el caracter de (nº 1). No se quizas en un array o con expresiones regulares????

Eso ya para nota, pero muchísimas gracias por la ayuda
  #6 (permalink)  
Antiguo 04/11/2008, 07:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: select distinct

ufff no parece la logica de instr....

A demas yo antes me plantaria normalizar la base y separar en campos distintos lo que ahora parece que lo tienes en un solo campo y luego todo seria mas sencillo....

Cuidado si hay campos sin la coma igual no te esta mostrando todo lo que quieres...

Quim
  #7 (permalink)  
Antiguo 25/06/2010, 19:05
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
Consulta con DISTINCT

Hola, tengo una tabla STOCK con los sgts. campos. IdProducto,IdMarca,Lote,IdAlmacen, pero el IdProducto lo jalo de otra tabla Productos ya que puede existir el mismo nombre del producto con otra marca, otro lote o que pertenece a otro almacen. he registrado los siguientes registros:
001 01 A002 01
001 01 A010 01
001 02 B210 01
002 02 A541 01

Si observamos los registros, los 3 primeros corresponden a un mismo producto, el tercero corresponde a otra marca, y los 3 son de diferentes lotes.
Mi consulta es la siguiente: quiero realizar una consulta donde me muestre como Unico producto x marca sin considerar los Lotes, estoy utilizando DISTINCT pero igual no me funciona, me sigue mostrando todos, la consulta deberia salir asi:

UREA MISTI PRINCIPAL
UREA MOLINOS PRINCIPAL
SULFATO MOLINOS PRINCIPAL

pero me sale asi:

UREA MISTI PRINCIPAL
UREA MISTI PRINCIPAL
UREA MOLINOS PRINCIPAL
SULFATO MOLINOS PRINCIPAL

Por favor, si alguien pudiera ayudarme con la consulta, le agradeceria bastante...
  #8 (permalink)  
Antiguo 27/06/2010, 08:27
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: select distinct

quita el distinct y usa group by, agrupando por esos tres campos , y creo que te saldrán los distintos tipos
... GROUP BY campo1, campo2, campo3
  #9 (permalink)  
Antiguo 01/08/2010, 19:39
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
Respuesta: select distinct

Bueno amigos, gracias a todos pero el problema lo resolvi con Left Join...
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:53.