Ajuda com selects, whiles e afins

26/10/2013

0

PHP

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
Alessandra

Alessandra

Responder

Posts

26/10/2013

Joel Rodrigues

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.
Responder

26/10/2013

Joel Rodrigues

Para facilitar, poste aqui a estrutura das suas tabelas (colunas de cada uma).
Responder

28/10/2013

Alessandra

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
Responder

08/11/2013

Alessandra

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?
Responder

08/11/2013

Joel Rodrigues

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:
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.
Responder

08/11/2013

Alessandra

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 ?
Responder

08/11/2013

Joel Rodrigues

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.
Responder

08/11/2013

Alessandra

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 )
Responder

08/11/2013

Joel Rodrigues

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.
Responder

08/11/2013

Alessandra

è 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

<?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)
Responder

08/11/2013

Joel Rodrigues

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.
Responder

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)
Responder

10/11/2013

Joel Rodrigues

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:
$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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar