Série da semana: Buscas semânticas com Elasticsearch

Veja mais

SQLite

09/11/2018

Bom dia Pessoal

Estou com uma duvida, tenho um banco de dados com duas tabelas uma cliente e a outra cursos, onde o cliente pode fazer vários cursos até aqui tudo bem consigo add os cursos ao cliente, fiz um inner join entre essas duas colunas pra pode na hora da consulta do cliente saber quais cursos ele esta fazendo, mais na hora da consulta dos clientes ele me retorna todos os cursos cadastros msm no nome de outro cliente, eu gostaria de saber se tem algum filtro pra filtra isso.

Ex: pesquisar por Fulano de Tal e ele me retorna só os cursos que esse fulano de tal esta fazendo.

Agradeço a todos desde já.

Melhor post

12/11/2018

Acredito que você precise fazer em 2 passos:

- primeiro exclua os cursos:
DELETE FROM tabela_cursos WHERE id_aluno = (SELECT id_aluno FROM tabela_alunos WHERE nome_aluno = "Alekym")

- depois exclua o aluno:
DELETE FROM tabela_alunos WHERE nome_aluno = "Alekym"

Responder Citar

Outros Posts

09/11/2018

Alekym

Tente dessa forma, ele busca todos os cursos que tem aluno e que o nome do aluno na tabela seja o que tu digitou.

// Exemplo para busca exata do nome
SELECT * FROM <tabela_cursos> tc INNER JOIN <tabela_alunos> ta ON tc.id_aluno = ta.id_aluno AND ta.nome_aluno = "Alekym";

// Exemplo para busca dinamica
SELECT * FROM <tabela_cursos> tc INNER JOIN <tabela_alunos> ta ON tc.id_aluno = ta.id_aluno AND ta.nome_aluno LIKE "%Alekym%";
Responder Citar

09/11/2018

Tassio

Tente dessa forma, ele busca todos os cursos que tem aluno e que o nome do aluno na tabela seja o que tu digitou.

// Exemplo para busca exata do nome
SELECT * FROM <tabela_cursos> tc INNER JOIN <tabela_alunos> ta ON tc.id_aluno = ta.id_aluno AND ta.nome_aluno = "Alekym";

// Exemplo para busca dinamica
SELECT * FROM <tabela_cursos> tc INNER JOIN <tabela_alunos> ta ON tc.id_aluno = ta.id_aluno AND ta.nome_aluno LIKE "%Alekym%";




Muito Obrigado deu certo!!
Deus Abençoe você amigo
Responder Citar

09/11/2018

Tassio

Alekym

Agora surgiu mais uma duvida.
Tipo se eu quiser deletar o aluno junto com o curso usando o inner join, como eu faço?
Responder Citar

12/11/2018

Tassio

Bom dia Emerson!
Meu código está assim, tentei usar sua dica mais ele me retorna um erro :(





def Delete():
if len(tree.selection()) == 0:
tkMessageBox.showinfo("Deletar","Selecione um Nome")
else:
result = tkMessageBox.askquestion('Deletar', 'Tem certeza disso', icon="warning")
if result == 'yes':
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
Database()
cursor.execute("DELETE FROM `tabela_alunos` WHERE `id_aluno` = %d" % selecteditem[0])
conn.commit()
atualizar()
cursor.close()
conn.close()
Responder Citar

12/11/2018

Emerson

Não sei o que está contido em selecteditem[0] e nem sei qual foi o erro apresentado.
De qualquer modo, com base no teu código, selecteditem[0] deveria conter o ID do aluno, porque é com o id que a query está trabalhando.
Mais uma coisa: apague o item da tree somente após apagar o registro do banco de dados (isso se a função atualizar() já não o fizer).
def Delete():
	if len(tree.selection()) == 0:
		tkMessageBox.showinfo("Deletar","Selecione um Nome")
	else:
		result = tkMessageBox.askquestion('Deletar', 'Tem certeza disso', icon="warning")
		if result == 'yes':
			curItem = tree.focus()
			contents =(tree.item(curItem))
			selecteditem = contents['values']
			Database()
			cursor.execute("DELETE FROM `tabela_alunos` WHERE `id_aluno` = %d" % selecteditem[0])
			conn.commit()
			tree.delete(curItem) // movi a exclusão do item da tree para depois de eliminação do registro físico
			atualizar() // se a função atualizar() refizer a tree, nem precisa da linha acima
			cursor.close()
			conn.close()

Responder Citar

12/11/2018

Tassio

O "selecteditem[0]" contém o id do nome selecionado na tabela pra a exclusão
Responder Citar

12/11/2018

Emerson

Qual o erro apresentado?

A linha para o comando SQL não deveria ser:

cursor.execute("DELETE FROM tabela_alunos WHERE id_aluno = %d", (selecteditem[0]) )

ou

cursor.execute("DELETE FROM tabela_alunos WHERE id_aluno = %d", selecteditem[0] )

Responder Citar

12/11/2018

Tassio

O "selecteditem[0]" contém o id do nome selecionado na tabela pra a exclusão
Esse é o erro "database is locked"
Responder Citar