MySQL: PHP пока с запросом, а другой с запросом, как улучшить? - PullRequest
0 голосов
/ 03 марта 2011

Ребята, у меня есть этот запрос, который получает ключевое слово и ищет в БД массив статей для отображения в соответствии с результатами запроса по этому ключевому слову, а затем мне нужно получить информацию об этих статьях в соответствии с идентификаторами, которые я получил, и показать их. Запрос не очень хорошо сделан, может кто-нибудь помочь мне очистить следующий код и улучшить его?

Спасибо

$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

Спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Это должно помочь вам двигаться в правильном направлении:

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 голос
/ 03 марта 2011

2 варианта:

  1. используйте JOIN для объединения источников данных. В этом случае вам потребуется только 1 запрос, хотя я не совсем уверен, как он будет выглядеть, поскольку выбор из c_normas as n, c_jurisdiccion as j, c_tiponorma as t, c_materia as m кажется мне странным / неправильным.
  2. после получения данных из $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), а не (..) where n.IdNorma = 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...