Jump to content


Photo

Select


  • Faça o login para participar
7 replies to this topic

#1 kurole

kurole

    Ativo

  • Usuários
  • 345 posts
  • Sexo:Não informado

Posted 13/10/2007, 11:44

Olá gostaria de saber se é possivel dar um select da seguinte forma...

tabela 1

usuarios //nome da tabela
id = 1, nome='marco aurélio', email='kurole@kurole.com'
id = 2, nome='nayane', email='nayane@kurole.com'
id = 3, nome='marcio', email='marcio@kurole.com'

tabela 2

musicas //nome da tabela
id = 1, cantor='ricardadao', estilo='to com sua muié' quem_enviou=''
id = 2, cantor='da poutrona', estilo='seranejo' quem_enviou=''
id = 3, cantor='zaza', estilo='cor sim cornao' quem_enviou='2'
id = 4, cantor='maria', estilo='papai noel' quem_enviou='3'
id = 5, cantor='josue', estilo='vai ou racha' quem_enviou=''


o que eu quero fazer seria issu

$comando = mysql_query("select * from musicas order by id desc");

while( $rs = mysql_fetch_assoc( $comando ) ){
echo $rs['cantor'];

if ($rs['quem_enviou'] != ""){
$rs_2 = mysql_fetech_assoc( mysql_query("select * fom usuarios where id = '$rs['id']'") );
echo $rs_2['nome'];
}
}


desse forma acima funciona perfeitamente so que eu queria fazer um select so é possivel??? sendo que tem musicas que o id de quem enviou esta em branco?..

//teoricamente esse seria o comando correto... mas a tabela de musica que no campo quem enviou esta em branco ele nao seleciona....
$comando = "SELECT * FROM usuarios U, musicas M WHERE (M.quem_enviou = U.id) ORDER BY M.cantor ASC";

Valeu..
KUROLE

#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 13/10/2007, 18:01

SELECT * FROM musicas M LEFT JOIN  usuarios U ON U.id = M.quem_enviou ORDER BY M.cantor ASC

Procure uns artigos na devmedia.com.br sobre JOINs. ;)

Edição feita por: Eclesiastes, 13/10/2007, 18:02.

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#3 kurole

kurole

    Ativo

  • Usuários
  • 345 posts
  • Sexo:Não informado

Posted 13/10/2007, 22:18

Caracas... funcionow.. perfeitamente.....

se não for pedir muito daria para explicar esse comando

veja se minha logica esta correta....

SELECT * FROM musicas M // estou selecionando todos os campos da tabela musica
LEFT JOIN usuarios U ON U.id = M.quem_enviou // aqui estou selecionando somente as musicas que possuem id (quem enviou)

se for isso o que "ON" quer dizer??

Abraço....
KUROLE

Edição feita por: kurole, 13/10/2007, 22:19.


#4 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 14/10/2007, 08:22

SELECT * FROM musicas M // estou selecionando todos os campos da tabela musica
Não, irá trazer todos os campos das tabelas envolvidas no select.

O select que postei selecionna todas os registros da tabela a esquerda fazendo junção com os dados da direita que satisfazem a condição da junção (no ON).

No site que mencionei tem uns artigos bem legais a respeito.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#5 kurole

kurole

    Ativo

  • Usuários
  • 345 posts
  • Sexo:Não informado

Posted 14/10/2007, 09:31

Olha que estranho que aconteceu...

usei

SELECT * FROM musicas M LEFT JOIN usuarios U ON U.id = M.quem_enviou ORDER BY M.cantor ASC


seguindo a mesma logica... fiz assim
SELECT * FROM musicas M LEFT JOIN usuarios U ON (U.id = M.quem_enviou) LEFT JOIN fotos F ON (F.id_usuario = M.quem_enviou) ORDER BY M.cantor ASC

Deis dois F5 para atualizar a pagina... rsrss derrubou o meu servidor dedicado lá na locaweb.... rsrss

So lembrando que as tabelas contem os seguintes registros:

Musicas 400
Usuarios 20.000
Fotos 9.000

Parece que para cada laço da while ele esta rodando os 9.000 registros... como disse funcionow uma vez depois de mais de 20 segundos.. ai dei F5 caiu o servidor ou seja o MySql não abria mais novas conexoes..

Abraço....
Kurol3

#6 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 16/10/2007, 18:18

Rapaz, e por que você quer mostrar todos os registros? Põe um LIMIT nisto!

Põe um limit e vê se os registros estão vindo como deseja, e outra, roda um EXPLAIN dessa query.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#7 kurole

kurole

    Ativo

  • Usuários
  • 345 posts
  • Sexo:Não informado

Posted 16/10/2007, 23:36

Sim a paginacao existe de 1 a 10...

eu nem comentei isso pq eu sei fazer e esta prontinho..

so o que quero é selecionar todos do mural usuarios e hinos

estou dando esse select

"SELECT M.nome as nome_mural, M.email as email_mural,M.*,U.flog, U.foto FROM mural M LEFT JOIN USR U ON (M.id_cadastro = U.id) and M.bloqueia = '' ORDER BY M.id DESC LIMIT $inicio, $reg_p_pag"
while ($deus = @ mysql_fetch_assoc($result)){//



eu queria dar esse tb no mesmo select

$verifica_setemhino = @ mysql_query("select * from HINOS where usuario = '".$deus['id_cadastro']."'");

if ( @ mysql_num_rows($verifica_setemhino) != 0){
echo '<a title="Clique aqui e veja todos os meus hinos enviados" target="_top" href="inicio.php?email_acesso_mural='.$deus['id_cadastro'].'">Meus hinos enviados </a>';
}
}//fecha while.....


KUROLE

#8 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 17/10/2007, 20:51

Estranho, que informações afinal você deseja? Quais campos de quais tabelas indicam a mesma informação?
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq