Ajuda com selects, whiles e afins
ola sou novata (vai dar pra ver..rs) e to quebrando a cabeça pra criar um sistema assim ...
quero mostrar um post/noticia, com categoria e sub categorias .. por exemplo
noticia 01 (titulo) , essa é a noticia 01 (texto) internet (categoria) google, facebook, orkut (subcategorias)
noticia 02 (titulo) , essa é a noticia 02 (texto) receitas (categoria) pão, molho, sobremesa (subcategorias)
tenho 3 tabelas no mysql que sao
noticias
categorias
subcategorias
agora o problema ta que nao sei como linkar uma na outra sabe
tipo ja tentei de n maneiras, mais oque mais consegui fazer foi aparecer todas as categorias e as subcategorias, sera que algum anjo poderia me ensinar ?
meu skype alessandraferrarini@hotmail.com
quero mostrar um post/noticia, com categoria e sub categorias .. por exemplo
noticia 01 (titulo) , essa é a noticia 01 (texto) internet (categoria) google, facebook, orkut (subcategorias)
noticia 02 (titulo) , essa é a noticia 02 (texto) receitas (categoria) pão, molho, sobremesa (subcategorias)
tenho 3 tabelas no mysql que sao
noticias
categorias
subcategorias
agora o problema ta que nao sei como linkar uma na outra sabe
tipo ja tentei de n maneiras, mais oque mais consegui fazer foi aparecer todas as categorias e as subcategorias, sera que algum anjo poderia me ensinar ?
meu skype alessandraferrarini@hotmail.com
Alessandra
Curtidas 0
Respostas
Joel Rodrigues
26/10/2013
Nesse caso você possui dois tipos de relacionamentos:
Noticias X Categorias: 1 para muitos
Noticias X Subcategorias: muitos para muitos
É preciso que cada uma tenha pelo menos um campo identificador, ou seja, uma chave primária. Com isso é possível relacioná-las, formando tabelas auxiliares.
Por exemplo, em uma estrutura bem simples poderia ficar assim:
Tabela Noticias
- ID_Noticia
- Titulo
- Texto
- ID_Categoria (chave estrangeira que aponta para a chave primária da tabela Categorias)
Tabela Noticias_Subcategorias
- ID_Noticia (chave estrangeira que aponta para a chave primaria da tabela Noticias)
- ID_Subcategoria (chave estrangeira que aponta par a chave primária da tabela Subcategorias)
Neste exemplo eu não me preocupei com a estrutura das tabelas Categorias e Subcategorias, pois o importante é que elas tenham uma chave primária.
Noticias X Categorias: 1 para muitos
Noticias X Subcategorias: muitos para muitos
É preciso que cada uma tenha pelo menos um campo identificador, ou seja, uma chave primária. Com isso é possível relacioná-las, formando tabelas auxiliares.
Por exemplo, em uma estrutura bem simples poderia ficar assim:
Tabela Noticias
- ID_Noticia
- Titulo
- Texto
- ID_Categoria (chave estrangeira que aponta para a chave primária da tabela Categorias)
Tabela Noticias_Subcategorias
- ID_Noticia (chave estrangeira que aponta para a chave primaria da tabela Noticias)
- ID_Subcategoria (chave estrangeira que aponta par a chave primária da tabela Subcategorias)
Neste exemplo eu não me preocupei com a estrutura das tabelas Categorias e Subcategorias, pois o importante é que elas tenham uma chave primária.
GOSTEI 0
Joel Rodrigues
26/10/2013
Para facilitar, poste aqui a estrutura das suas tabelas (colunas de cada uma).
GOSTEI 0
Alessandra
26/10/2013
Oi joel bom dia ...
entao eu tenho as tabelas mais ou menos como voce falou..
Tabela Noticias
idNot
Titulo
Categoria(chave estrangeira da tabela Noticias - idCat)
subcategoria (chave estrangeira para tabela subCategoria)
Tabela Categoria
idCat
nomeCat
idSub
Tabela subCategoria
idSub
nomeSub
idNot
Eu nao consigo fazer o select pra pegar a noticia, com sua categoria e as varias subcategorias ...
Se puder me dar uma luz agradeço muitooooooo
entao eu tenho as tabelas mais ou menos como voce falou..
Tabela Noticias
idNot
Titulo
Categoria(chave estrangeira da tabela Noticias - idCat)
subcategoria (chave estrangeira para tabela subCategoria)
Tabela Categoria
idCat
nomeCat
idSub
Tabela subCategoria
idSub
nomeSub
idNot
Eu nao consigo fazer o select pra pegar a noticia, com sua categoria e as varias subcategorias ...
Se puder me dar uma luz agradeço muitooooooo
GOSTEI 0
Alessandra
26/10/2013
entao só revivendo o topico pois ainda não consegui fazer.
tenho as tres tabelas [url]http://4.bp.blogspot.com/-QxPm5P1t2dk/Un0N8a_MVVI/AAAAAAAAHjQ/L_CwLNBV3kQ/s1600/tabelas.PNG[/url]
dai tenho o codigo:
[QUOTE]
$link = @mysql_connect('localhost' , 'root' , '');
if(!$link)
die($mysql_error);
// No SQL, o BD tá com nome de imasters
$db = mysql_select_db('alessandra');
$sql = '
SELECT
noticias.idNot,
noticias.subcategorias,
noticias.titulo,
notsub.subcategoria,
subcategorias.idSub,
subcategorias.nomeSub
FROM
noticias
INNER JOIN notsub ON noticias.subcategorias = notsub.notId
INNER JOIN subcategorias ON notsub.subcategoria = subcategorias.idSub
' ;
$query = mysql_query($sql);
while($linha = mysql_fetch_array($query)){
echo "
(Id Noticia:){$linha['idNot']}</br>
(titulo){$linha['titulo']}</br>
(titulo){$linha['nomeSub']}</br></br>
</hr>";
}
[/QUOTE]
So que ele ta mostrando assim:
[QUOTE](Id Noticia:)1
(titulo)titulo 01
(titulo)facebook
(Id Noticia:)2
(titulo)tiulo 02
(titulo)facebook
(Id Noticia:)1
(titulo)titulo 01
(titulo)google
(Id Noticia:)1
(titulo)titulo 01
(titulo)orkut[/QUOTE]
eu queria que ele mostrasse
titulo 01, facebok, google , orkut
titulo 2, facebook
Alguem da um help?
tenho as tres tabelas [url]http://4.bp.blogspot.com/-QxPm5P1t2dk/Un0N8a_MVVI/AAAAAAAAHjQ/L_CwLNBV3kQ/s1600/tabelas.PNG[/url]
dai tenho o codigo:
[QUOTE]
$link = @mysql_connect('localhost' , 'root' , '');
if(!$link)
die($mysql_error);
// No SQL, o BD tá com nome de imasters
$db = mysql_select_db('alessandra');
$sql = '
SELECT
noticias.idNot,
noticias.subcategorias,
noticias.titulo,
notsub.subcategoria,
subcategorias.idSub,
subcategorias.nomeSub
FROM
noticias
INNER JOIN notsub ON noticias.subcategorias = notsub.notId
INNER JOIN subcategorias ON notsub.subcategoria = subcategorias.idSub
' ;
$query = mysql_query($sql);
while($linha = mysql_fetch_array($query)){
echo "
(Id Noticia:){$linha['idNot']}</br>
(titulo){$linha['titulo']}</br>
(titulo){$linha['nomeSub']}</br></br>
</hr>";
}
[/QUOTE]
So que ele ta mostrando assim:
[QUOTE](Id Noticia:)1
(titulo)titulo 01
(titulo)facebook
(Id Noticia:)2
(titulo)tiulo 02
(titulo)facebook
(Id Noticia:)1
(titulo)titulo 01
(titulo)google
(Id Noticia:)1
(titulo)titulo 01
(titulo)orkut[/QUOTE]
eu queria que ele mostrasse
titulo 01, facebok, google , orkut
titulo 2, facebook
Alguem da um help?
GOSTEI 0
Joel Rodrigues
26/10/2013
Olá, Alessandra. Desculpe não ter respondido antes, é que são tantos tópicos que acabei não vendo quando você respondeu.
Em um único select você consegue trazer os dados da notícia e da categoria, já que o relacionamento é de 1 para 1. Porém, não dá para trazer todas as subcategorias no mesmo select, pois o relacionamento é de 1 para N. Se você precisa ver todas as subcategorias de uma notícia, terá que fazer um select separado, filtrando a tabela auxiliar, por exemplo:
Isso traria só os nomes das subcategorias (uma por linha) às quais pertence uma certa notícia.
Em um único select você consegue trazer os dados da notícia e da categoria, já que o relacionamento é de 1 para 1. Porém, não dá para trazer todas as subcategorias no mesmo select, pois o relacionamento é de 1 para N. Se você precisa ver todas as subcategorias de uma notícia, terá que fazer um select separado, filtrando a tabela auxiliar, por exemplo:
SELECT subcategorias.nomeSub FROM subcategorias INNER JOIN notsub ON notsub.subcategoria = sucategorias.idSub WHERE notsub.notId = "O ID DA NOTÍCIA QUE VOCÊ QUER"
Isso traria só os nomes das subcategorias (uma por linha) às quais pertence uma certa notícia.
GOSTEI 0
Alessandra
26/10/2013
Entao mais é tipo na pagina principal eu queria que listasse todas as noticias entendeu , e essas subcategorias seriam tipo tags ou marcadores..
Voce acha que tendo essas 3 tabelas é o correto ?
Voce acha que tendo essas 3 tabelas é o correto ?
GOSTEI 0
Joel Rodrigues
26/10/2013
Perfeitamente, foi até o que eu sugeri também. As tabelas estão corretas, o que não dá é pra trazer as subcategorias no mesmo select que os dados da notícia. Você terá que trazê-las separadamente. Ou seja, para cada notícia, precisa de um select para ver as subcategorias. Até porque eu acho que você vai querer fazer um link em cada subcategoria, para listar as demais notícias de cada uma. Para isso, você vai precisar também do id de cada subcategoria.
GOSTEI 0
Alessandra
26/10/2013
isooo mesmo , bem isso , mais assim se nao for pedir demais tem como voce postar o codigo pronto ?
De repente da pra aproveitar isso que ja fiz , sera que consegue me ajudar ?
(nao me mande pra aquele lugar !!!!1 )
De repente da pra aproveitar isso que ja fiz , sera que consegue me ajudar ?
(nao me mande pra aquele lugar !!!!1 )
GOSTEI 0
Joel Rodrigues
26/10/2013
Façamos assim: crie o código para listar apenas a notícia com a categoria e poste aqui. Ah, use as tags CODE.
Aí eu tento complementar com as subcategorias.
Aí eu tento complementar com as subcategorias.
GOSTEI 0
Alessandra
26/10/2013
è que a categoria nao tem muito problema pq categoria mesmo so vai ter uma, por isso nem coloquei o codigo, o problema ta em listas as varias subcategorias, que no caso tb estarei usando como tags, mais de qualquer jeito fiz assim
Nisso ta retornando dessa maneira:
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)google
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)facebook
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)orkut
(Id Noticia:)2
(titulo)tiulo 02
(Categoria)receitas
(Subcategoria)facebook
e eu queria assim
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)orkut, facebook, google
(Id Noticia:)2
(titulo)tiulo 02
(Categoria)receitas
(Subcategoria)facebook (ela so tem uma subcategoria mesmo)
<?php $link = @mysql_connect('localhost' , 'root' , ''); if(!$link) die($mysql_error); // No SQL, o BD tá com nome de imasters $db = mysql_select_db('alessandra'); $sql = ' SELECT noticias.idNot, noticias.titulo, noticias.categorias, noticias.subcategorias, categorias.idCat, categorias.nomeCat, notsub.notId, notsub.subcategoria, subcategorias.idSub, subcategorias.nomeSub FROM noticias INNER JOIN categorias ON noticias.categorias = categorias.idCat INNER JOIN notsub ON noticias.subcategorias = notsub.notId INNER JOIN subcategorias ON notsub.subcategoria = subcategorias.idSub ORDER BY noticias.titulo ASC ' ; $query = mysql_query($sql); while($linha = mysql_fetch_array($query)){ echo " (Id Noticia:){$linha['idNot']}</br> (titulo){$linha['titulo']}</br> (Categoria){$linha['nomeCat']}</br> (Subcategoria){$linha['nomeSub']}</br></br> </hr>"; } ?>
Nisso ta retornando dessa maneira:
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)google
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)facebook
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)orkut
(Id Noticia:)2
(titulo)tiulo 02
(Categoria)receitas
(Subcategoria)facebook
e eu queria assim
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)orkut, facebook, google
(Id Noticia:)2
(titulo)tiulo 02
(Categoria)receitas
(Subcategoria)facebook (ela so tem uma subcategoria mesmo)
GOSTEI 0
Joel Rodrigues
26/10/2013
Então, faça como eu pedi. Liste só a notícia com a categoria e deixe as subcategorias para depois. É aí que eu vou "entrar" para ajudar.
GOSTEI 0
Alessandra
26/10/2013
<?php $link = @mysql_connect('localhost' , 'root' , ''); if(!$link) die($mysql_error); $db = mysql_select_db('alessandra'); $sql = ' SELECT noticias.idNot, noticias.titulo, noticias.categorias, categorias.idCat, categorias.nomeCat FROM noticias INNER JOIN categorias ON noticias.categorias = categorias.idCat ' ; $query = mysql_query($sql); while($linha = mysql_fetch_array($query)){ echo " (Id Noticia:){$linha['idNot']}</br> (titulo){$linha['titulo']}</br> (Categoria){$linha['nomeCat']}</br> (Subcategoria)</br></br> </hr>"; } ?>
(Id Noticia:)1
(titulo)titulo 01
(Categoria)internet
(Subcategoria)
(Id Noticia:)2
(titulo)tiulo 02
(Categoria)receitas
(Subcategoria)
GOSTEI 0
Joel Rodrigues
26/10/2013
Não tenho como testar aqui, mas dentro desse while que você já tem, você precisará fazer outro select para listar só as subcategorias. Então, depois desse echo que imprime a notícia, você vai precisar inserir algo como o seguinte trecho de código:
Deve precisar de alguma adaptação, mas creio que a base seja essa.
$sqlSubcategorias = ' SELECT idSub, nomeSub FROM subcateorias INNER JOIN notsub on notsub.subcategoria = subcategorias.idSub WHERE notsub.notId ='.$linha['idNot']; $querySubcategorias = mysql_query($querySubcategorias); while($linhaSubcategoria = mysql_fetch_array($query)){ echo $linhaSubcategoria['nomeSub']; }
Deve precisar de alguma adaptação, mas creio que a base seja essa.
GOSTEI 0