Comunidad de diseño web y desarrollo en internet online

Buscando una buena forma de armar mi base de datos

Citar            
MensajeEscrito el 13 Oct 2019 09:46 pm
Buenas tardes, soy nuevo con esto de MySql y necesito un poco de orientación...

Estoy haciendo una pagina de musica en donde los temas a escuchar se dividen en décadas de esta manera...


Código :

<h1>Actual</h1> <--  (2019)
...
...

<h1>2010</h1>     <--  (2018-2010)
...
...

<h1>2000</h1> 
...
...

<h1>1990</h1> 
...
...

<h1>1980</h1>
...
...

Tengo muchas dudas pero empezare por la primera, una tabla por cada década o todos los temas en una sola tabla y de ahí lo manejo con una columna y el año?

Por Fabricio_

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Oct 2019 11:30 am
Dado que el tema de la pagina es la musica, el ano es una propiedad de los temas, es decir una columna de la tabla temas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 14 Oct 2019 05:38 pm
Gracias por contestar Jorge, etonces en una sola tabla todos los temas y una columna con el año para filtrarlos, ahora para separarlos por decadas es valido hacer varias consultas a la vez?
Por ejemplo
$consulta1 = "SELECT decada FROM musica ... 2019
$consulta2 = "SELECT decada FROM musica ... 2010
$consulta3 = "SELECT decada FROM musica ... 2000
etc... o hay mejores alternativas?

Por Fabricio_

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Oct 2019 06:21 pm
seria suponiendo que la columna se llame Date y la decada sea la primera de este siglo

Select * from musica where YEAR(Date)>=2000 AND YEAR(Date)<=2010

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 15 Oct 2019 05:55 pm
Que bien, había pensado crear una función php para comprobar fechas pero tu ejemplo es mucho mas practico y pude lograr lo que quería

Por Fabricio_

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Oct 2019 03:09 am
Tengo una duda, en un principio la consulta en la base de datos la hacia de esta manera ...

Código PHP :

<?php
include("script/conexion.php");

$sentencia= $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=2000 AND lanzamiento <=2009  ORDER BY lanzamiento DESC, title");
$sentencia->execute();
$lista2000 = $sentencia->fetchAll(PDO::FETCH_ASSOC);

$sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=1990 AND lanzamiento <=1999  ORDER BY lanzamiento DESC, title");
$sentencia->execute();
$lista1990 = $sentencia->fetchAll(PDO::FETCH_ASSOC);

$sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=1980 AND lanzamiento <=1989  ORDER BY lanzamiento DESC, title");
$sentencia->execute();
$lista1980 = $sentencia->fetchAll(PDO::FETCH_ASSOC);


Luego como la lista se me hacia muy extensa le adapte un código para mostrar un valor predeterminado...

Código PHP :

$sentencia = $pdo->prepare("SELECT count(*) FROM musica WHERE lanzamiento >=2010 AND lanzamiento <=2019");
$sentencia->execute();

$counter = $sentencia->fetchColumn();
if ($counter > 65) {
  $page = 1;
  if (array_key_exists('pg', $_GET)) { $page = $_GET['pg'];  }
  $max_num_paginas = intval($counter / 65);

  $sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=2010 AND lanzamiento <=2019 ORDER BY date DESC LIMIT " . (($page) * 65) . ", 65 "); }
else {
  $page = 0;
  $sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=2010 AND lanzamiento <=2019 ORDER BY date DESC");
  }
$sentencia->execute();
$lista2010 = $sentencia->fetchAll(PDO::FETCH_ASSOC);


Todo funciona bien pero como debería pegar el mismo código para todas las consultas se me vino la idea de hacer una función que seria...

Código PHP :

function consulta($num_paginas, $desde, $hasta) {
    include("conexion.php");
    $decada = $pdo->prepare("SELECT count(*) FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ");
    $decada->execute();
    $counter = $decada->fetchColumn();
    
    if ($counter > $num_paginas) {
        $page = 1;
        if (array_key_exists('pg', $_GET)) { $page = $_GET['pg'];  }
        $max_num_paginas = intval($counter / $num_paginas);
        $decada = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ORDER BY date DESC LIMIT " . (($page) * $num_paginas) . ", $num_paginas ");
            }
        else {
        $page = 0;
        $decada = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ORDER BY date DESC");
           }
        $decada->execute();
        $lista = $decada->fetchAll(PDO::FETCH_ASSOC);


Y la llamo desde el index

Código PHP :

<?php
        include("funciones.php");
        consulta(65, 2010, 2019);
        consulta(65, 1980, 1989);
        consulta(65, 2000, 2009);
        consulta(65, 1990, 1999); 
?>


65 es la cantidad de lineas que quiero mostrar entre los años seleccionados
Mis problemas o dudas son que al arrancar la función me conecto a la base de datos, hay alguna forma de colocar include("conexion.php"); para que solo se pida una vez?

Código PHP :

function consulta($num_paginas, $desde, $hasta) {
    include("conexion.php");
    $decada = $pdo->prepare("SELECT count(*) FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ");


Repito que el código funciona bien, si bien debo tener algún error porque recién comienzo pero se me hace que no es necesario conectar a la base de datos por cada consulta, si yo pongo el include("conexion.php"); en cualquier otro lados cuando arranca la función me sale que hay un problema con la variable $pdo Notice: Undefined variable: pdo y también Fatal error: Uncaught Error: Call to a member function prepare()

Por Fabricio_

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Oct 2019 12:16 pm
Para ello tienes que tener en cuenta el scope de las variables, que son globales o locales dentro de la funcion. Si quieres declarar la conexion y usarla en una funcion intenta declararla asi dentro de la funcion

[php]
function consulta($num_paginas, $desde, $hasta) {
global $pdo;
.....[/php

Es importante entender el ambito de las variables (o scope en ingles) https://www.php.net/manual/es/language.variables.scope.php

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 19 Oct 2019 02:46 pm
Hola Jorge, coloque el global tal cual me dijiste y funciono a la primera, abrí los link que dejaste y hay mucha información sobre las variables así que me pondré a investigar un poco mas a fondo

Te hago una consulta, cuando estaba creando la función en un principio era
function consulta($estilo, $num_paginas, $desde, $hasta)

Te cuento que estoy usando Visual Estudio Code pero al ingresar letras en consulta(pop, 65, 2010, 2019); me lo coloreaba de una forma que parecía un código no valido entonces decidí quitar $estilo para no complicarme, solo pasaba al ingresar letras, con números iba bien, hubiera tenido problemas o solo fue una sensación mía ?

Desde ya muchas gracias por tu ayuda, consejos y orientación

Por Fabricio_

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Oct 2019 03:15 pm
No uso Visual Studio Code, sino Sublime Text, cada editor tiene sus trucos, habitualmente hay algun foro de los usuarios de cada herramienta

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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