Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com lógica de programação.


ximnes

Pergunta

Boa tarde rapaziada.

Olha só, estou desenvolvendo o site do meu selo de gravação musical, especializado em RAP.

Estou com o layout pronto,
Faz tempo que não programo PHP e estou me atualizando para fazer o portal direito. Sem gambiarras como costumava fazer hehe.

A questão é que estou botando no papel todas as idéias e conteúdos para desenvolver de forma organizada.

Então vou explicar melhor as minhas idéias e ficaria feliz se pudessem me dar um suporte, mandando alguns links de certos tutoriais. Eu andei procurando porém mesmo assim tenho minhas dúvidas.

Eu estou escrevendo as tabelas do banco de dados e estou pensando em uma forma de integrá-las de forma certa e simples.

As tabelas:

tb_artists

- artist_id (int) 5

- artist_type varchar 15 (aqui será definido se o artista é mc, beatmaker, etc)

- artist_since int 4 (desde que ano o artista faz parte do selo)

- artist_aka varchar 30 (codinome do artista)

- artist_aka_url varchar 30 (tratamento para url amigável ex: Nome do Artista -> nome-do-artista)

- artist_release longtext (release do artista)

- artist_email_login ..

- artist_password_login ...

tb_albums

- artist_id

- artist_aka

- artist_aka_url

- album_id (bigint) 255

- album_type (varchar) 20 (que tipo de álbum, se é um EP, uma Beat Tape, um álbum completo etc..)

- album_title (varchar) 40

- album_title_url

....

tb_albums_content

- artist_id

- album_id

- album_track_id (bigint) 255

- album_track_type (varchar) 20 (se é um single, etc)

- album_track_number (número da track do cd)

- album_track_title e track_title_url

- album_track_participation_id, part_aka, part_aka_url

- album_track_producer_id, prod_aka, prod_aka_url

- album_track_link

....

tb_main_content

content_id (bigint) 255

album_id

album_track_id

content_status (int) 1 (1 ativo 0 inativo)

content_highlight (int) 1 ( " )

content_type (se é notícia, novidade etc)

content_date

....

as dúvidas começam exatamente assim.

na página do artista quero relacionar as últimas 10 notícias(tb_main_content) relacionadas a ele, porém na tabela não relaciono o artista, seria necessário por algum campo pra relacionar? existe alguma forma de select que busque o artista em algum campo, sem precisar estar relacionado?

alguns produtores do selo não tem albuns próprios, porém produziram certas faixas de algum mc do selo, tem um campo na tb_albums_content que se chama album_track_producer_aka.

usaria um if para ver se o artist_type é produtor e faria uma busca na tb_albums_content e não própriamente na tb_albums.

Porém há produtores que produziram faixas de outros cds, e que também tem cds próprios, e essa coluna(album_track_producer_aka) seria preenchida a cada track com o produtor no seu próprio album.

Isso seria um problema porque listaria 2 vezes. se usasse um if para isso seria mais uma condição e mais uma nova consulta.

na página relacionada a certo produtor, quero buscar um thumb do(s) cd(s) que ele tenha produzido nem que seja uma faixa, porém ele fará a busca no conteúdo das faixas do cd e não propriamente na tb_albums, claro que tem um campo chamado album_id na tb_albums_content, porém teria que resgatar essa ID e fazer uma nova busca na tb_albums.

existe alguma outra forma de fazer essa busca?

eu criei um sisteminha aqui que funciona mais fica complicado e tenho certeza que dá para fazer mais simples e funcional.

segue o código.

Página artistMain.php onde se lista os artistas:

<?php $conPDO = new PDO($dsn_db, $user_db,$pass_db); ?>
<a href="<?php echo $PHP_SELF; ?>">principal</a> > artistas<br>
<ul id"" class="">
<?php
$sqlArtists = 'SELECT * FROM tb_artists ORDER BY artist_aka ASC LIMIT 10';
$sqlArtistsPDO = $conPDO->query($sqlArtists);
while($rowArtistsPDO = $sqlArtistsPDO->fetchObject()) {
echo "<li>";
echo "<h3><a href=\"". $PHP_SELF ."/artist/" . $rowArtistsPDO->artist_aka_url . "/\">" . $rowArtistsPDO->artist_aka . "</a></h3>";
echo "</li>";
}
$conPDO = null;
?>
</ul>  

pag artistContent.php

<?php $conPDO = new PDO($dsn_db, $user_db,$pass_db); ?>
<?php
$sqlArtistCount = $conPDO->prepare('SELECT COUNT(*) FROM tb_artists WHERE artist_aka_url = :artistAKA');
$sqlArtistCount->execute(
array(
':artistAKA' => $_REQUEST['aka_url']
)
);
$resArtistCount = $sqlArtistCount->fetchColumn();
if($resArtistCount == false){
echo "Não foi possível abrir a página solicitada";
} else {
echo "<a href=\"". $PHP_SELF ."\"/>principal</a> > <a href=\"". $PHP_SELF ."/artists/\">artistas</a> > ";
$sqlArtistAKA = $conPDO->prepare('SELECT artist_aka , artist_aka_url , artist_type FROM tb_artists WHERE artist_aka_url = :artistAKA');
$sqlArtistAKA->execute(
array(
':artistAKA' => $_REQUEST['aka_url']
)
);
$sqlArtistAKA = $sqlArtistAKA->fetchObject();
$artistType = $sqlArtistAKA->artist_type;
echo "<a href=\"". $PHP_SELF ."/artist/" . $sqlArtistAKA->artist_aka_url . "/\">" . $sqlArtistAKA->artist_aka . "</a>";
echo " > catálogo<br>";
?>
<?php
if($artistType == "Producer"){
$sqlProducerAlbumCount = $conPDO->prepare('SELECT COUNT(*) FROM tb_albums WHERE artist_aka_url = :artistAKA');
$sqlProducerAlbumCount->execute(
array(
':artistAKA' => $_REQUEST['aka_url']
)
);
$resProducerAlbumCount = $sqlProducerAlbumCount->fetchColumn();
if($resProducerAlbumCount == false){
?>
Faixas Produzidas:<br>
<table width="595" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Música</td>
<td width="85">Lançado em</td>
<td width="87">Selo</td>
<td width="119">Registro</td>
</tr>
<?php
$sqlCatalogProducerPDO = $conPDO->prepare('SELECT * FROM tb_albums_content WHERE album_track_producer_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogProducerPDO->execute(
array(
':artistAKA' => $_REQUEST['aka_url'] 
)
);

while($rowCatalogProducerPDO = $sqlCatalogProducerPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogProducerPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/\">" . $rowCatalogProducerPDO->album_title . "</a></td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/" . $rowCatalogProducerPDO->album_track_title_url . "/\">" . $rowCatalogProducerPDO->album_track_title . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_track_producer_aka . "</td>";
echo "<td></td>";
echo "<td></td>";
echo "</tr>";
}
?>
</table>
<?php
} else {
?>
Álbums:<br>
<table width="595" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Tipo</td>
<td width="85">Lançado em</td>
<td width="87">Selo</td>
<td width="119">Registro</td>
</tr>
<?php
$sqlCatalogProducerPDO = $conPDO->prepare('SELECT * FROM tb_albums WHERE artist_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogProducerPDO->execute(
array(
':artistAKA' => $_REQUEST['aka_url'] 
)
);

while($rowCatalogProducerPDO = $sqlCatalogProducerPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogProducerPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/\">" . $rowCatalogProducerPDO->album_title . "</a></td>";
echo "<td>" . $rowCatalogProducerPDO->album_type . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_date . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_label . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_registry . "</td>";
echo "</tr>";
?>
<?php
}
?>
</table>

Faixas Produzidas:<br>
<table width="595" border="1" cellspacing="0" cellpadding="0">
<tr align="center">
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Música</td>
</tr>
<?php
$sqlCatalogProducerPDO = $conPDO->prepare('SELECT * FROM tb_albums_content WHERE album_track_producer_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogProducerPDO->execute(
array(
':artistAKA' => $_REQUEST['aka_url'] 
)
);

while($rowCatalogProducerPDO = $sqlCatalogProducerPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogProducerPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/\">" . $rowCatalogProducerPDO->album_title . "</a></td>";
if($rowCatalogProducerPDO->album_track_participation_aka == null){
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/" . $rowCatalogProducerPDO->album_track_title_url . "/\">" . $rowCatalogProducerPDO->album_track_title . "</td>";
} else {
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/" . $rowCatalogProducerPDO->album_track_title_url . "/\">" . $rowCatalogProducerPDO->album_track_title . " (Part. " . $rowCatalogProducerPDO->album_track_participation_aka . ")</td>";
}
echo "</tr>";
}
?>
</table>

<?php
}
} else { ?>
Álbums:<br>
<table width="595" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Tipo</td>
<td width="85">Lançado em</td>
<td width="87">Selo</td>
<td width="119">Registro</td>
</tr>
<?php
$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums WHERE artist_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogArtistPDO->execute(
array(
':artistAKA' => $_REQUEST['aka_url'] 
)
);

while($rowCatalogArtistPDO = $sqlCatalogArtistPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogArtistPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogArtistPDO->artist_aka_url . "/release/" . $rowCatalogArtistPDO->album_id . "/" . $rowCatalogArtistPDO->album_title_url . "/\">" . $rowCatalogArtistPDO->album_title . "</a></td>";
echo "<td>" . $rowCatalogArtistPDO->album_type . "</td>";
echo "<td>" . $rowCatalogArtistPDO->album_date . "</td>";
echo "<td>" . $rowCatalogArtistPDO->album_label . "</td>";
echo "<td>" . $rowCatalogArtistPDO->album_registry . "</td>";
echo "</tr>";
?>
<?php
}
?>
</table>
<?php
}
}
?>

<?php
$conPDO = null;
?> 

Ainda é um "Beta" pois estou tendo idéias e vendo formas de implementar.

Sei muito, muito pouco MESMO de OOP.

Acham que precisaria saber de OOP pra conseguir desenvolver esse portal direito?

O desempenho melhoraria usando OOP mesmo com tantas condições?

Recomendam algum artigo? tutorial? apostila?

Eu li bastante já, porém entendo somente as que eu vejo, mas quando é para criar minhas classes e funções eu travo.

Não consigo desenvolver uma Classe nem uma Função realmente funcional para resolver meus problemas.

Desculpem o post gigante.

Agradeço a quem ler, e mais ainda a quem puder dar uns pitacos.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...