2013-08-29 4 views
1

У меня есть следующий поиск:Проблемы с поиском PHP результатов

<form action="/playsearch" method="post"> 
<input type="checkbox" value="1" name="imported" id="imported" class=""> 
<label class="" for="imported">Imported</label><br> 
<input type="checkbox" value="1" name="fresh" id="fresh" class=""> 
<label class="" for="fresh">Fresh</label><br> 
<input type="checkbox" value="1" name="labeled" id="labeled" class=""> 
<label for="labeled" class="">Labeled</label><br> 
<input type="checkbox" value="1" name="wrapped" id="wrapped" class=""> 
<label for="wrapped" class="">Wrapped</label><br> 
<input type="checkbox" value="1" name="organic" id="organic" class=""> 
<label for="organic" class="">Organic</label><br> 
<button type="submit" name="fruitsearch">Submit</button> 
</form> 

В playsearch страницы у меня есть этот код:

<?php 
if(isset($_POST['imported']) && $_POST['imported'] == 1){$qImported = 'Yes';} 
if(isset($_POST['fresh']) && $_POST['fresh'] == 1){$qFresh = 'Yes';} 
if(isset($_POST['labeled']) && $_POST['labeled'] == 1){$qLabeled = 'Yes';} 
if(isset($_POST['wrapped']) && $_POST['wrapped'] == 1){$qWrapped = 'Yes';} 
if(isset($_POST['organic']) && $_POST['organic'] == 1){$qOrganic = 'Yes';} 

if (isset($_POST['fruitsearch'])) { $fruitsearch= $_POST['fruitsearch']; } 

if (isset($fruitsearch)) { 
    $write = Mage::getSingleton('core/resource')->getConnection('core_write'); 
    $readresult = $write->query("SELECT DISTINCT product_id FROM catalog_category_product ORDER BY product_id"); 
    while ($row = $readresult->fetch()) { 
     $prodid = explode(" ", $row['product_id']); 
     foreach ($prodid as $id){ 
      $_product = new Mage_Catalog_Model_Product(); 
      $_product->load($id); 
      $attributeSetName = Mage::getModel('eav/entity_attribute_set')->load($_product->getAttributeSetId())->getAttributeSetName(); 
      if($attributeSetName == 'Fruits'){ 
       $attribute_imported = $_product->getAttributeText('is_imported'); 
       $attribute_fresh = $_product->getAttributeText('is_fresh'); 
       $attribute_labeled = $_product->getAttributeText('is_labeled'); 
       $attribute_wrapped = $_product->getAttributeText('is_wrapped'); 
       $attribute_organic = $_product->getAttributeText('is_organic'); 

       if($qImported == $attribute_imported && $qFresh == $attribute_fresh && $qLabeled == $attribute_labeled && $qWrapped == $attribute_wrapped && $qOrganic == $attribute_organic){ 
        echo $name.'<br/>'; 
       } 
      } 
    } 

    } 
} 
?> 

Продукт может иметь каждый или комбинацию из этих 5 фильтров (импортированные, свежие, маркированные, обернутые, органические). Моя проблема в том, что, если, например, когда я нажимаю импортировать и завернутый в форму поиска, я получаю только «импортированные», и я знаю, что есть «импортированные» и «завернутые» продукты. Как мой запрос должен выглядеть правильно для любой комбинации? Спасибо большое !!!

+0

1. не храните 'Да/Нет' в db, но' 0/1'; 2. что 'explode()' для получения идентификаторов - запах для ненормализованной базы данных - советую вам узнать о 'JOIN'-операциях. – moonwave99

+0

платформа Magento и все те 5 атрибутов ($ attribute_imported и так) имеют значение «Да/Нет» – user2727341

ответ

0
  1. Если установлены атрибуты post, напишите SQL-код, чтобы проверить, выполнено ли условие. Это будет использоваться позже в ваших соединениях.

  2. Не запрашивайте все ваши продукты. Напишите один запрос, который объединяет product с entity_attribute_set. Используйте предложение where, в котором вы включаете условия, сгенерированные на шаге 1.

  3. Идите по своим результатам и отобразите результат.

Вы отправляете большое количество запросов на сервер базы данных. Уменьшите их число, отправив один запрос. Вы извлекаете много ненужных записей. Отфильтруйте их. В вашем запросе в тех случаях, когда условия используют операцию or на условиях, сгенерированных на этапе 1.

+1

Кроме того, ваши PHP-переменные устанавливаются только в том случае, если установлен флажок. Лучше сделать это: '$ qImported = (isset ($ _ POST ['imported']) && $ _POST ['imported'] == 1)? «Да»: «Нет», «чтобы они были установлены в любом случае. – Revent

+0

Ницца, @ Revent, я забыл добавить это к ответу. Вы абсолютно правы. –

Смежные вопросы