2014-11-10 6 views
0

У меня есть таблица, содержащая анализ почвы, около 400 тыс. Строк, с примерно 30 столбцами. У всех строк есть столбец Year, где он говорит что-то между 1997 и 2014 годами.Запрос MYSQL на основе нескольких флажков HTML

Я позволю пользователю выполнить запрос MySQL на основе нескольких HTML-форм и одного флажка для каждого года. Если флажок не установлен, он просматривается каждый год в таблице. Мое намерение состоит в том, чтобы позволить пользователю выбрать определенный год или несколько с помощью флажков.

Я скопировал то, что у меня есть прямо сейчас. (Я исключил переменные и прочее, извините шведского здесь и там) HTML-формы отлично работают. Но я еще не понял, как использовать флажки. Я не знаю, как реализовать их в запросе MySQL. Я пробовал поиск в Google, но в моем случае вопрос кажется каким-то конкретным. Я был бы очень рад услышать ваше мнение по этому вопросу.

 <form id="form" action="statisticsToMap.php" method="post"> 
      <p>______Minimum_____________Maximum______</p> 
      <p>pH: <input type="text" name="min-ph" onkeypress="return isNumberKey(event)"> pH: <input type="text" name="max-ph" onkeypress="return isNumberKey(event)"></p> 
      <p>P-AL: <input type="text" name="min-p" onkeypress="return isNumberKey(event)"> P-AL: <input type="text" name="max-p" onkeypress="return isNumberKey(event)"></p> 
      <p>K-AL: <input type="text" name="min-k" onkeypress="return isNumberKey(event)"> K-AL: <input type="text" name="max-k" onkeypress="return isNumberKey(event)"></p> 
      <p>Mg-AL: <input type="text" name="min-mg" onkeypress="return isNumberKey(event)"> Mg-AL: <input type="text" name="max-mg" onkeypress="return isNumberKey(event)"></p> 
      <p>Lerhalt: <input type="text" name="min-ler" onkeypress="return isNumberKey(event)"> Lerhalt: <input type="text" name="max-ler" onkeypress="return isNumberKey(event)"></p> 
      <p>Sand-Grovmo: <input type="text" name="min-sgrovmo" onkeypress="return isNumberKey(event)"> Sand-Grovmo: <input type="text" name="max-sgrovmo" onkeypress="return isNumberKey(event)"></p> 
      <p>Mullhalt: <input type="text" name="min-mull" onkeypress="return isNumberKey(event)"> Mullhalt: <input type="text" name="max-mull" onkeypress="return isNumberKey(event)"></p> 
      <p>Klicka i vilka årtal som du vill söka efter: (tomma rutor söker alla årtal)</p> 
      <input type="checkbox" name="1997" value="1997"> 1997 
      <input type="checkbox" name="1998" value="1998"> 1998 
      <input type="checkbox" name="1999" value="1999"> 1999 
      <input type="checkbox" name="2000" value="2000"> 2000 
      <input type="checkbox" name="2001" value="2001"> 2001<br> 
      <input type="checkbox" name="2002" value="2002"> 2002 
      <input type="checkbox" name="2003" value="2003"> 2003 
      <input type="checkbox" name="2004" value="2004"> 2004 
      <input type="checkbox" name="2005" value="2005"> 2005 
      <input type="checkbox" name="2006" value="2006"> 2006<br> 
      <input type="checkbox" name="2007" value="2007"> 2007 
      <input type="checkbox" name="2008" value="2008"> 2008 
      <input type="checkbox" name="2009" value="2009"> 2009 
      <input type="checkbox" name="2010" value="2010"> 2010 
      <input type="checkbox" name="2011" value="2011"> 2011<br> 
      <input type="checkbox" name="2012" value="2012"> 2012 
      <input type="checkbox" name="2013" value="2013"> 2013 
      <input type="checkbox" name="2014" value="2014"> 2014 
      <input type="checkbox" name="2015" value="2015"> 2015 
      <input type="checkbox" name="2016" value="2016"> 2016<br> 
      <p>Begränsa antal resultat:</p> <input type="text" name="limitrows" onkeypress="return isNumberKey(event)"> (Standard är 2000 rader)<br><br> 

      <table> 
       <tr> 
       <input type="submit" value="Sök i databas"onclick="submitForm('')"> 
       <input type="submit" value="Visa resultat på karta" onclick="submitForm('statisticsToMap.php')"> 
       </form> 
       </tr> 
      </table> 


$sql = "SELECT `kundnr`, `Year`, `Provnr`, `pH`, `P_AL`, `P_HCl`, `K_AL`, `K_HCl`, `Mg_AL`,  
     `Cu_HCl`, `K_Mg_kvot`, `Bor`, `Ca_AL`, `Total_lerhalt`, `Sand_grovmo`, `Mullhalt` 

     FROM `analyser` 

     WHERE 


      (IFNULL(`pH`,    '0') BETWEEN $minph  AND $maxph) 
     AND (IFNULL(`P_AL`,    '0') BETWEEN $minpal  AND $maxpal) 
     AND (IFNULL(`K_AL`,    '0') BETWEEN $minkal  AND $maxkal) 
     AND (IFNULL(`Mg_AL`,   '0') BETWEEN $minmg  AND $maxmg) 
     AND (IFNULL(`Total_lerhalt`, '0') BETWEEN $minler  AND $maxler) 
     AND (IFNULL(`Mullhalt`,   '0') BETWEEN $minmull AND $maxmull) 
     AND (IFNULL(`Sand_grovmo`,  '0') BETWEEN $minsgrovmo AND $maxsgrovmo) 

     LIMIT 0,$limitrows"; 

/Simon

+0

Будет ли это сделать вещи очень медленно, чтобы просто вернуть весь набор данных, и обрабатывать все функции фильтрации/постраничной на стороне клиента (например, в Ajax/PHP)? – Strawberry

ответ

0

бы не так просто быть случай, когда вы будете динамически строить пункт YEAR IN (..) на основе выбора года? Например. когда были отобраны 2008, 2010 и 2012:

SELECT * FROM SOIL_DATA WHERE YEAR IN (2008, 2010, 2012)

+0

Спасибо. Я использовал ваше решение. Добавлены годы в массив, который используется, если и isset для флажков. Затем взорвать с помощью ",". Работал отлично. – Simon

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