Ajuda com selects, whiles e afins
26/10/2013
0
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
Posts
26/10/2013
Joel Rodrigues
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.
26/10/2013
Joel Rodrigues
28/10/2013
Alessandra
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
08/11/2013
Alessandra
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?
08/11/2013
Joel Rodrigues
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.
08/11/2013
Alessandra
Voce acha que tendo essas 3 tabelas é o correto ?
08/11/2013
Joel Rodrigues
08/11/2013
Alessandra
De repente da pra aproveitar isso que ja fiz , sera que consegue me ajudar ?
(nao me mande pra aquele lugar !!!!1 )
08/11/2013
Joel Rodrigues
Aí eu tento complementar com as subcategorias.
08/11/2013
Alessandra
<?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)
08/11/2013
Joel Rodrigues
08/11/2013
Alessandra
<?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)
10/11/2013
Joel Rodrigues
$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.
Clique aqui para fazer login e interagir na Comunidade :)