伙计我有这个查询,它获取一个关键字,并在数据库中搜索根据该关键字查询结果显示的文章数组,然后我需要根据我得到的ID获取有关这些文章的信息并显示它。查询做得不好,有人可以帮我清理下一段代码并改进吗?
谢谢
$cleanKeyword = str_replace("+", " ", $keyword);
$i = mysql_query("SELECT IdNorma FROM $cpalabras WHERE Descripcion = '$cleanKeyword'");
while($materia = mysql_fetch_array($i)){
// storing idNorma into a variable
$IdNorma = $materia['IdNorma'];
$SQL = "SELECT n.*, j.Descripcion as jurisdiccion,
t.Descripcion as tipo,
date_format(n.FechaDesde,'%d') as dia,
date_format(n.FechaDesde,'%m') as mes,
date_format(n.FechaDesde,'%Y') as anio
FROM c_normas as n, c_jurisdiccion as j, c_tiponorma as t, c_materia as m
WHERE 1=1 ";
$SQL .= "AND n.IdNorma = '$IdNorma' ";
$SQL .= "ORDER BY Fechadesde DESC LIMIT 300";
var_dump($SQL);
$a = mysql_query($SQL);
if(mysql_num_rows($a) > 0) {
while($row = mysql_fetch_array($a)){ ?>
<tr style="display:inline-block;width:100%;border-bottom:1px solid #E3E6EB;padding:4px 0;font-size: 10px;" class="listaEventoUnicoTr" id="quickSearchTr">
<td width="120" align="left" id="searchable"><strong><?php echo fromDB($row['tipo']); ?></strong></td>
<td width="90" align="left"><a href="http://www.ips.com.ar/normmunipC/IPS_Municipal_files/files/<?php echo fromDB($row['Archivo']); ?>" target="_blank"><?php echo fromDB($row['Numero']); ?></a></td>
<td width="90" align="left" id="searchable"><?php echo fromDB($row['dia'])."-".fromDB($row['mes'])."-".fromDB($row['anio']); ?></td>
<td width="255" align="left" style="padding-top:4px;padding-bottom:4px;" id="searchable"><?php echo fromDB($row['Descripcion']); ?></td>
</tr>
<?php } //while
} else { //if ?>
<tr style="display:inline-block;width:100%;border-bottom:1px solid #E3E6EB;padding:4px 0;font-size: 10px;" class="listaEventoUnicoTr" id="quickSearchTr">
<td width="500" align="center" colspan="4"> No hay resultados.</td>
</tr>
<?php } // else
}// /while ids
谢谢你们!
答案 0 :(得分:2)
这可以帮助您朝着正确的方向前进:
SELECT n.*, j.descripcion as jurisdiccion, t.Descripcion as tipo, date_format(n.FechaDesde,'%d') as dia, date_format(n.FechaDesde,'%m') as mes, date_format(n.FechaDesde,'%Y') as anio
FROM c_normas as n
LEFT JOIN $cpalabras on $cpalabras.IdNorma = n.IdNorma
ORDER BY Fechadesde DESC LIMIT 300
答案 1 :(得分:1)
2个选项:
JOIN
加入数据源。在这种情况下,你只需要1个查询,但我不太确定它会是什么样子,因为从c_normas as n, c_jurisdiccion as j, c_tiponorma as t, c_materia as m
中选择对我来说似乎很奇怪/错误。$cpalabras
获取数据后,创建“有效”$IdNorma
值列表,然后执行单个查询以从c_normas as n, c_jurisdiccion as j, c_tiponorma as t, c_materia as m
中选择所有必要数据,有些像{(..) where n.IdNorma in (1, 2, 3)
1}},而不是(..) where n.IdNorma = 1
。