Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal.
Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades.
Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo:
1, casa, casas, S
2, mesa, mesas, S
3, cama, camas, S
4, moto, motos, S
5, rádio, rádios
O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo.
E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros:
1, casa, camas, moto
2, mesas, casas, radio
3, rádio, cama, mesa
Eu preciso fazer uma busca na tabela variações da seguinte maneira:
Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens.
Como faço isso?
Vou lhe dar outro exemplo de como você pode realizar esta consulta utilizando IN.
A consulta SQL inicial buscará na tabela variações todos os registros que contenham a palavra "casa" ou seu plural "casas", e em seguida verificará se os outros itens desses registros estão ativos. Como SQL tem limitações para verificar múltiplas colunas de uma forma dinâmica em diferentes tabelas, faremos uma abordagem que requer uniões múltiplas com a tabela itens.
SELECT v.*
FROM variações v
JOIN itens i1 ON (v.item1 = i1.item OR v.item1 = i1.plural) AND i1.ativo = 'S'
JOIN itens i2 ON (v.item2 = i2.item OR v.item2 = i2.plural) AND i2.ativo = 'S'
JOIN itens i3 ON (v.item3 = i3.item OR v.item3 = i3.plural) AND i3.ativo = 'S'
WHERE 'casa' IN (v.item1, v.item2, v.item3) OR 'casas' IN (v.item1, v.item2, v.item3)
Processamento PHP
<?php
$pdo = new PDO('mysql:host=your_host;dbname=your_dbname', 'username', 'password');
// Sua consulta SQL
$sql = "SELECT v.* FROM variações v JOIN itens i1 ON (v.item1 = i1.item OR v.item1 = i1.plural) AND i1.ativo = 'S' JOIN itens i2 ON (v.item2 = i2.item OR v.item2 = i2.plural) AND i2.ativo = 'S' JOIN itens i3 ON (v.item3 = i3.item OR v.item3 = i3.plural) AND i3.ativo = 'S' WHERE 'casa' IN (v.item1, v.item2, v.item3) OR 'casas' IN (v.item1, v.item2, v.item3)";
$stmt = $pdo->query($sql);
// Verifica se há registros
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "Registro encontrado: " . implode(", ", $row) . "<br>";
} echo "Nenhum registro ativo encontrado.";
}
?>
Obs.: Troque os valores fixos por variaveis.
Para realizar essa consulta no banco de dados usando PHP, você pode usar uma consulta SQL que envolve JOIN e condições de busca com LIKE para atender aos critérios especificados.
Exemplo:
// Item selecionado (exemplo: "casa")