Comunidad de diseño web y desarrollo en internet online

consulta de sql en dreamweaver

Citar            
MensajeEscrito el 12 Mar 2007 05:42 pm
Saludos.
Amigos, necesito de su colaboración para hacer correctamente la siguiente consulta.
La idea es: De la DB editora, se cargan los datos de la columna "Género" y que en un componente lista/menú de dreamweaver se muestren.
Ahí no hay problema, el problema es que hay varios datos con un tipo de género idéntico, entonces el componente de dreamweaver me repite el mismo género la cantidad de veces que está en la base de datos. Lo que necesito es que el componente me traiga los nombres de "Género" solo una vez, no repetidos.
Les dejo el código por si me pueden colaborar. Mil gracias.

Codigo de consulta:

Código :

########################################
<?php
mysql_select_db($database_editora, $editora);
$query_Recordset1 = "SELECT * FROM hoja1 ORDER BY Género ASC";
$Recordset1 = mysql_query($query_Recordset1, $editora) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
########################################

Código del componente:
########################################
<select name="busqueda_genero" size="1" id="busqueda_genero">
       <?php
do {  
?>
       <option value="<?php echo $row_Recordset1['Género']?>"<?php if (!(strcmp($row_Recordset1['Género'], $row_Recordset1['Género']))) {echo "selected=\"selected\"";} ?>><?php echo $row_Recordset1['Género']?></option>
       <?php
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
  $rows = mysql_num_rows($Recordset1);
  if($rows > 0) {
      mysql_data_seek($Recordset1, 0);
     $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  }
?>
      </select>
########################################


JOHNMARTIN

Por JOHNMARTIN

Claber

1222 de clabLevel

4 tutoriales
4 articulos
2 ejemplos

Genero:Masculino  

||| BOGOTA COLOMBIA |||

firefox
Citar            
MensajeEscrito el 12 Mar 2007 11:31 pm
ese es el problema cuando se depende de un programa q te diseñe tu web y no q solo la programes, si solo usas php y no usas el modo de diseñador sera mas facil, yo antes pesaba q eso era un dolor de cabeza pero yo no uso modo de diseñador (ni uso dreamweaver), puedes usar el modo de diseñador para ir construyendo el diseño pero no para construir toda la web, no se sabe q respuesta vaya a dar php de acuerdo al codigo y si algo no salio bien (o no se tomo en cuenta) la web no funcionara bien.

Por petrov

186 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Mar 2007 12:22 am
En la sentencia sql se podria acomodar pero el error parece venir del diseño de la base de datos que segun noto no esta normalizada

En fin, cambia esta linea

Código :

$query_Recordset1 = "SELECT * FROM hoja1 ORDER BY Género ASC";

por

Código :

$query_Recordset1 = "SELECT * FROM hoja1 GROUP BY Genero ORDER BY Género ASC";


y listo

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 13 Mar 2007 03:49 am
JOHNMARTIN, un favor por el bien de la humanidad, no uses nombres de campo con acento. U_U

John te recomiendo cambiar tu SQL por el siguiente:

Código :

SELECT * FROM hoja1 GROUP BY Genero ASC


Maik, cuando haces un group by, puedes ordenar con este. Si haces un group sobre un campo y luego ordenas sobre ese campo es como si crearas un doble indexamiento, no tiene caso.


saludos U_U

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 13 Mar 2007 07:20 am

Dano escribió:

Código :

SELECT * FROM hoja1 GROUP BY Genero ASC



Maik, cuando haces un group by, puedes ordenar con este. Si haces un group sobre un campo y luego ordenas sobre ese campo es como si crearas un doble indexamiento, no tiene caso.


Dos cosas:

  1. MySQL no indexa dos veces, no hay retardo en la ejecucion de la sentencia si indicas explicitamente el ORDER BY que a mi parecer para un sql legible es mejor hacerlo explicito.
  2. En tal caso de que quieras omitir el ORDER BY tambien puedes omitir el ASC, pues es el ordenamiento por defecto


^^

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 13 Mar 2007 03:45 pm
Si sólo necesitas el Género, no consultes con: " * ", sino especifica el campo que deseas consultar, y puedes utilizar "DISTINCT" para que no te repita valores:

Código :

 "SELECT DISTINCT Género FROM hoja1 ORDER BY Género ASC"

Aunque creo que tendrías menos problemas si tuvieras un catálogo de Géneros en tu BD, y agregas una clave foránea a la tabla "hoja1". Así puedes realizar la consulta al catálogo con la seguridad de que no habrá valores repetidos.

Dano escribió:
En la sentencia sql se podria acomodar pero el error parece venir del diseño de la base de datos que segun noto no esta normalizada.


Maikel escribió:
JOHNMARTIN, un favor por el bien de la humanidad, no uses nombres de campo con acento. U_U


Asi es...U_U

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 13 Mar 2007 05:44 pm
EL PUNTO es, que al hacer el group HACE el ordenamiento, al agregar el ORDER BY, Primero agrupa despues ordena, ese es el punto, no tanto usar mas o menos palabras.!

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 13 Mar 2007 07:50 pm
Que yo sepa el GROUP BY agrupa y ORDER BY ordena...U_U

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 13 Mar 2007 08:56 pm

Darel escribió:

Que yo sepa el GROUP BY agrupa y ORDER BY ordena...U_U


Con GROUP BY tambien puedes hacer la ordenacion en base a la "agrupacion". Ahora en MySQL da igual como hagas la ordenación pues no hay doble indexación ni nada, el tiempo de respuesta es igual con el order by explicito o no.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 13 Mar 2007 10:01 pm
Exacto, eso era lo que trate de compartir en esta ocasión, para que aprendieran que el GROUP BY ordena. Muchos usan el ORDER BY en un campo que esta dentro de un GROUP, por que no saben que el GROUP BY también ordena. Por eso comente que se quitara. No tanto si es malo o bueno poner el ORDER.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por Dano el 13 Mar 2007 10:38 pm, editado 1 vez

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 13 Mar 2007 10:37 pm
Cual es la diferencia entre ordenar y agrupar?
Darel, buena firma jajajja

Por petrov

186 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Mar 2007 10:51 pm
Cual es la diferencia entre ordenar y agrupar?

Ordenar, en una consulta SQL, se refiere a la organización de registros comenzando de forma ascendente ó descendente en base al valor de uno o mas campos dados.

La agrupación es la obtención de los valores únicos de uno o más campos especificados. A su vez esa agrupación puede ser ordenada.

Si tienes una tabla de la siguiente forma:

Tabla: Productos

Código :

idProducto       Nombre      Categoria
1            Producto 1   Bombas
2            Producto 2   Bombas
3            Producto 3   Armas
4            Producto 4   Bombas
5            Producto 5   Armas

Código :

SELECT Categoria FROM Productos ORDER BY Categoria


Regresaría:
Armas <- idProducto = 3
Armas <- idProducto = 5
Bombas <- idProducto = 1
Bombas <- idProducto = 2
Bombas <- idProducto = 4

Código :

SELECT Categoria FROM Productos GROUP BY Categoria


Regresaría:
Armas <- Es un grupo que contiene todo los registros cuya categoria es Armas
Bombas <- Es un grupo que contiene todo los registros cuya categoria es Bombas


Espero con este te quede un poco mas claro.


saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 13 Mar 2007 10:59 pm
oh, mas o menos, entendi como es ordenar pero no agrupar como es?

Por petrov

186 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Mar 2007 11:02 pm
Ok, te explico agrupar, con pelotitas.


Imagina que tienes 10 pelotas. 3 pelotas son rojas, 4 blancas y 3 Azules. Si yo digo que quiero agrupar las pelotas entonces tendría los siguientes grupos:

- El grupo de pelotas rojas
- El grupo de pelotas blancas
- El grupo de pelotas azules

Eso es agrupar. En vez de pelotas usa registros, el concepto es el mismo. :wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 13 Mar 2007 11:07 pm
ohh, ya se, ya entendi, vino la luz a mi!!!!
pero, si digamos yo pongo la consulta GROUP BY blablabla, y pongo a php q haga una tabla con los registros, q pone en los registros q dovolvio? solo los nombres de los grupos?

Por petrov

186 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Mar 2007 12:16 am
Exacto!

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 14 Mar 2007 05:06 am

Maikel escribió:

En la sentencia sql se podría acomodar pero el error parece venir del diseño de la base de datos que según noto no esta normalizada

En fin, cambia esta linea

Código :

$query_Recordset1 = "SELECT * FROM hoja1 ORDER BY Género ASC";

por

Código :

$query_Recordset1 = "SELECT * FROM hoja1 GROUP BY Genero ORDER BY Género ASC";


y listo

saludos


Me ha funcionado perfectamente, mil gracias. Aunque quisiera saber precisamente que se requiere para que la DB quede "normalizada" ó "bien estructurada".

Gracias de nuevo eh!

JOHNMARTIN

Por JOHNMARTIN

Claber

1222 de clabLevel

4 tutoriales
4 articulos
2 ejemplos

Genero:Masculino  

||| BOGOTA COLOMBIA |||

firefox
Citar            
MensajeEscrito el 14 Mar 2007 11:34 pm
gracias Dano y disculpa por tanta jodedera

Por petrov

186 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 17 Mar 2007 02:00 am

JOHNMARTIN escribió:

Aunque quisiera saber precisamente que se requiere para que la DB quede "normalizada" ó "bien estructurada".


Estudiar diseño de base de datos la parte de normalización hay mucha documentación de eso en internet. La normalización reduce la redundancia de datos en una DB.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.