Arquivo da tag: SQL

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:xampphtdocscode.php on line XXX

Este problema na maioria das vezes é causado por uma consulta incorreta, desta forma ela não está podendo retornar dados e montar o recordset.

Imprima a consulta que você está tentando realizar utilizando o comando echo (no PHP) e execute-a no banco de dados através de um aplicativo como o phpMyAdmin, HeidiSQL, etc.

No meu caso, o erro da consulta foi a falta de uma virgula entre os campos que eu estava tentando consultar (d.Code e d.Title):

SELECT
    d.Code
    d.Title
FROM
    document d
    INNER JOIN project p ON (d.ProjectID = p.ID)
WHERE
    p.Code = 'cf23df2207d99a74fbe169e3eba035e633b65d94'
Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como descobrir a versão de seu servidor de banco de dados Oracle?

É possível executar a consulta abaixo em um cliente como o Oracle SQL Developer, SQL Plus, etc:

SELECT * FROM v$version;

Resultado:

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como retornar a linha de uma tabela quando o valor do count(*) for 0?

Este é um exemplo simples, imagine que você deseja mostrar todos as frutas, mesmo as que tem a quantidade com o valor 0. Em algumas ocasiões não é possível pois os filtros aplicados no Where terminam eliminando todos os registros daquele tipo de classe. No exemplo abaixo exibiria Morango, mas não seria exibida Banana.

SELECT
id
Count(*) quantidade
FROM
frutas
WHERE
frutas.cor = ‘Vermelho’
GROUP BY ID
ORDER BY ID

A solução para isso é listar todas os registros do dicionário de frutas e fazer um left join com a consulta.

SELECT
  dicionarioFrutas.id
  dicionarioFrutas.nome
  consultaFrutas.quantidade
FROM
  (SELECT frutas.id, frutas.nome FROM frutas) dicionarioFrutas,
  (
    SELECT
      id
      Count(*) quantidade
    FROM
      frutas
    WHERE
      frutas.cor = ‘Vermelho’
    GROUP BY ID
    ORDER BY ID
  ) consulta
  WHERE dicionarioFrutas.ID = consultaFrutas.ID (+) — LEFT JOIN do PL/SQL
  ORDER BY dicionarioFrutas.ID

Assim teriamos como resultado:

Morango: 1
Banana: Null

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como obter registros aleatórios no MySQL

Conseguir obter um registro aleatório pode até não ser um dos recursos mais importantes de um banco de dados, mas não deixa de ser muito útil, principalmente se você precisa:

  • Exibir itens sem mostrar favoritismo;
  • Testar o código retornando valores diferentes;
  • Exibir itens de forma não-específica;

Porém, apesar da grande utilidade, este é um recurso muito fácil de ser utilizado. Para isso basta utilizar o comando Rand() na cláusula ORDER BY:

 SELECT artigo_id, titulo, descricao FROM artigo ORDER BY RAND() LIMIT 4 

O código acima retornará a informação artigo_id, titulo, descricao (SELECT artigo_id, titulo, descricao) de quatro artigos (LIMIT 4) que estão contidos na tabela artigo (FROM artigo) selecionados de forma aleatória (ORDER BY RAND())

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

MySQL: Como copio a tabela de um banco de dados para outro?

Estava precisando criar um outro banco de dados para trabalhar com uma nova versão de um sistema, e me deparei com uma dúvida: como faço para copiar a tabela de um banco de dados para outro banco de dados em um mesmo servidor?

A resposta é simples! Digamos que você tenha dois bancos “BancoAntigo” e “BancoNovo”, e você deseja copiar a tabela “Teste” do “BancoAntigo” para o “BancNovo”:

DROP TABLE IF EXISTS BancoNovo.Teste;
CREATE TABLE BancoNovo.Teste SELECT * FROM BancoAntigo.Teste;
Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Listando todas as tabelas dos usuários no SQL Server

SELECT
    so.name
FROM
    sysobjects so
WHERE
    so.xtype = 'U' AND
    so.name <> 'dtproperties'
GROUP BY
    so.name
Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

No SQL, qual a diferença entre as cláusulas EXIST e IN?

A cláusula EXIST, segundo o site MSDN da microsoft, especifica uma subconsulta a ser testada quanto à existência de linhas. IN segundo o site MSDN da Microsoft determina se um valor especificado corresponde a qualquer valor em uma subconsulta ou uma lista.

Por exemplo: Imagine em um sistema previdenciário, um relatório que deseja trazer todos os credenciados que tem dependentes.

SELECT nome, matricula FROM credenciado WHERE EXIST (
    SELECT ID FROM dependente WHERE dependente.responsavelID = credenciado.ID
)

A consulta retornará apenas credenciados que tenham pelo menos um dependente. Como a claúsula EXIST deseja saber se existe pelo menos um, ele não realizará uma busca em toda a base de dados (Full Scan). No momento em que a subconsulta encontrar o primeiro resultado será finalizada, poupando recursos do servidor.

A cláusula IN tem um funcionamento diferente, utiliza-se quando o objetivo é verificar se a consulta retorna algum linha que esteja compatível com valores especificados.

Por exemplo: No mesmo sistema previdenciario, um relatório que se deseja trazer todos os credenciados que já morreram ou são inválidos.

SELECT nome, matricula FROM credenciado WHERE status IN (FALECIDO, INVALIDOS)

Os valores especificados podem ser através de uma subconsulta.

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).