Я изучаю PHP около недели, и мне нужно руководствоваться тем, следует ли мне использовать массивы для сортировки моих данных на основе нескольких переменных. Моя таблица содержит информацию об операх, композиторах, их национальностях и включает ссылку на соответствующий сайт.
Не будучи чрезмерно подробным, я должен позволить пользователю выбирать данные на основе Гражданства, Век, которые были написаны, и содержит ли он соответствующую ссылку. Я бы хотел, чтобы они были еще более конкретными, но мой код быстро становится неуправляемым. Для 3 переменных у меня есть восемь отдельных запросов, охватывающих каждый случай. Если я хочу перейти к 4 переменным, мне понадобятся 16 запросов. Я знаю, что есть лучший способ сделать это, но я много раз читал, что массивы более подходят для меньших количеств, не обязательно для таблицы, содержащей около 40 000 строк.
$req=$_REQUEST['nat']; $req2=$_REQUEST['cent']; $req3=$_REQUEST['imslp']; if ($req!="any" && $req2!="any" && $req3=="yes") $query="SELECT * FROM operadatabase WHERE nationality='$req' AND century=$req2 AND imslplink = imslplink"; else if ($req!="any" && $req2!="any" && $req3=="no") $query="SELECT * FROM operadatabase WHERE nationality='$req' AND century=$req2"; else if ($req!="any" && $req2=="any" && $req3=="yes") $query="SELECT * FROM operadatabase WHERE nationality='$req' AND imslplink = imslplink"; else if ($req!="any" && $req2=="any" && $req3=="no") $query="SELECT * FROM operadatabase WHERE nationality='$req'"; else if($req=="any" && $req2!="any" && $req3=="yes") $query="SELECT * FROM operadatabase WHERE century=$req2 AND imslplink = imslplink"; else if($req=="any" && $req2!="any" && $req3=="no") $query="SELECT * FROM operadatabase WHERE century=$req2"; else if($req=="any" && $req2=="any" && $req3=="yes") $query="SELECT * FROM operadatabase WHERE imslplink = imslplink"; else if($req=="any" && $req2=="any" && $req3=="no") $query="SELECT * FROM operadatabase"; $result=mysql_query($query); $num=mysql_numrows($result); mysql_query($result); mysql_close(); $i=0; for ($i; $i < $num; $i++){ $f12=mysql_result($result,$i,"fullname"); $f13=mysql_result($result,$i,"operatitle"); $f14=mysql_result($result,$i,"nationality"); $f15=mysql_result($result,$i,"century"); $f16=mysql_result($result,$i,"imslplink"); echo "<tr>"; echo "<td>".$f12."</td><td>".$f13."</td>"; if(strlen($f14) > 2) { echo '<td><img src="/icons/'.$f14.'.png" width="25" height="25"></td>'; } echo "<td>".$f15."</td>"; if(substr($f16, 0, 4) == "http") { echo "<td><a href=".$f16.">IMSLP</a></td>"; }
Лучший способ я могу сформулировать свои вопросы следующим образом: в рамках запроса, как я могу выбрать набор данных на основе одной переменной, а затем выбрать из этого набора на основе второй переменной, затем третьей и т. Д.? В качестве альтернативы, можно ли задать запросы?