Привет всем, народ, требуется помощь. я в СУБД новичок. Но надо сделать выборку по фильтру из базы данных. существует форма и обработчик. все на одной странице. обработчик очень корявый и выглядит как будто его писал школьник на первом уроке по программированию, но это было сделано буквально за пол часа. просто не знаю как сделать полностью рабочий вывод по фильтру. скину код всей страницы, а так же дам ссылку на нее. сайт корявый, не ругайтесь. PHP: <div class="search"> <form action="?page=search" method="post" id="form"> <select id="kyp" name="kyp"> <option value="1">КУПИТЬ</option> <option value="2">СНЯТЬ</option></select> <select id="city" name="city"> <option value="1">КВАРТИРУ</option> <option value="2">ДОМ</option></select> <select id="km" name="km"> <option disable>КОЛИЧЕСТВО КОМНАТ</option> <?php for ($i=1; $i<=10; $i++) { echo "<option value='".$i."'>".$i."</option>"; } ?> </select> <select id="tpobj" name="tpobj"> <option disable>ТИП ОБЪЕКТА</option> <option value="1">ВТОРИЧКА</option> <option value="2">НОВОСТРОЙКА</option> </select> <select id="tphouse" name="tphouse"> <option disable>ТИП ДОМА</option> <option value="1">КИРПИЧНЫЙ</option> <option value="2">ПАНЕЛЬНЫЙ</option> <option value="3">БЛОЧНЫЙ</option> <option value="4">МОНОЛИТНЫЙ</option> <option value="5">ДЕРЕВЯННЫЙ</option> </select> <select id="price" name="price"> <option disable>ЦЕНА</option> <option value="1">500 000 - 1 000 000</option> <option value="2">1 000 000 - 1 500 000</option> <option value="3">1 500 000 - 2 000 000</option> <option value="4">2 000 000 - 2 500 000</option> <option value="5">2 500 000 - 3 000 000</option> <option value="6">3 000 000<</option> </select> <button>ПОИСК</button> </form> </div> <div class="body"> <div class="left"> <div class="homes"> <?php $db = "****************"; $username = "**************"; $password = "*********"; mysql_connect($db, $username, $password); mysql_select_db("kmvned_db"); if (!isset($_POST["kyp"])) { $query = mysql_query("SELECT * FROM `sale` ORDER BY `id` DESC"); while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { $id = $row["id"]; $about = $row["about"]; $type = $row["type"]; $room = $row["room"]; $obj = $row["object"]; $type_house = $row["type_house"]; $price = $row["price"]; $img = $row["images"]; echo ' <div id="name1">'.$type.'</div> <img src="'.$img.'1.jpg"> <div id="p">Количество комнат: '.$room.'.<br>Тип объекта: '.$obj.'.<br>Тип дома: '.$type_house.'<br>'.$about.' <div id="price">'.$price.' РУБ.</div> <a href="?page=home&id='.$id.'">ПОДРОБНЕЕ</a> </div> '; } } else { if ($_POST["kyp"] == "1") { $sale = "yes"; } elseif ($_POST["kyp"] == "2") { $rate = "yes"; } if ($_POST["city"] == "1") { $tp = "kv"; } elseif ($_POST["city"] == "2") { $tp = "dm"; } if ($_POST["km"] == "КОЛИЧЕСТВО КОМНАТ") { $km = "no"; } elseif ($_POST["km"] == "1") { $km = 1; } elseif ($_POST["km"] == "2") { $km = 2; } elseif ($_POST["km"] == "3") { $km = 3; } elseif ($_POST["km"] == "4") { $km = 4; } elseif ($_POST["km"] == "5") { $km = 5; } elseif ($_POST["km"] == "6") { $km = 6; } elseif ($_POST["km"] == "7") { $km = 7; } elseif ($_POST["km"] == "8") { $km = 8; } elseif ($_POST["km"] == "9") { $km = 9; } elseif ($_POST["km"] == "10") { $km = 10; } if ($_POST["tpobj"] == "ТИП ОБЪЕКТА") { $to = "no"; } elseif ($_POST["tpobj"] == "1") { $to = "new"; } elseif ($_POST["tpobj"] == "2") { $to = "old"; } if ($_POST["tphouse"] == "ТИП ДОМА") { $td = "no"; } elseif ($_POST["tphouse"] == "1") { $td = "1"; } elseif ($_POST["tphouse"] == "2") { $td = "2"; } elseif ($_POST["tphouse"] == "3") { $td = "3"; } elseif ($_POST["tphouse"] == "4") { $td = "4"; } elseif ($_POST["tphouse"] == "5") { $td = "5"; } if ($_POST["price"] == "ЦЕНА") { $pr = "no"; } elseif ($_POST["price"] == "1") { $pr = "1000000"; } elseif ($_POST["price"] == "2") { $pr = "1500000"; } elseif ($_POST["price"] == "3") { $pr = "2000000"; } elseif ($_POST["price"] == "4") { $pr = "2500000"; } elseif ($_POST["price"] == "5") { $pr = "3000000"; } elseif ($_POST["price"] == "6") { $pr = "10000000"; } if ($sale == "yes") { if ($td == "no" || $km == "no" || $to == "no" || $pr == "no") { echo "Укажите все критерии"; } else { if ($tp == "kv") { $tp = "квартира"; } if ($tp == "dm") { $tp = "дом"; } if ($to == "new") { $to = "новостройка"; } if ($to == "old") { $to = "вторичка"; } if ($td == "1") { $td = "кирпичный"; } if ($td == "2") { $td = "панельный"; } if ($td == "3") { $td = "блочный"; } if ($td == "4") { $td = "монолитный"; } if ($td == "5") { $td = "деревянный"; } $query = mysql_query("SELECT * FROM `sale` WHERE `type`='$tp' OR `type_house`='$td' OR `object`='$to' OR `price`<='$pr' ORDER BY `id` DESC"); while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { $id = $row["id"]; $about = $row["about"]; $type = $row["type"]; $room = $row["room"]; $obj = $row["object"]; $type_house = $row["type_house"]; $price = $row["price"]; $img = $row["images"]; echo ' <div id="name1">'.$type.'</div> <img src="'.$img.'1.jpg"> <div id="p">Количество комнат: '.$room.'.<br>Тип объекта: '.$obj.'.<br>Тип дома: '.$type_house.'<br>'.$about.' <div id="price">'.$price.' РУБ.</div> <a href="?page=home&id='.$id.'">ПОДРОБНЕЕ</a> </div> '; } } } if ($rate == "yes") { } } mysql_close(); ?> </div> </div> </div> </div> и ссылка: http://kmvhome.com/?page=search надо сделать так, что все же можно было искать по одному из критериев, и чтоб оно искало. не знаю как сделать. просто не могу нормально додумать. вроде есть идеи но там столько говнокода будет. помогите этот оптимизировать по возможности, и сделать нормально рабочем. --- Добавлено --- если вдруг кому интересно, нашел вот такую функцию которая мне с этим очень помогла. переделать только под свои данные PHP: function addWhere($where, $add, $and = true) { if ($where) { if ($and) $where .= " AND $add"; else $where .= " OR $add"; } else $where = $add; return $where; } if (!empty($_POST["filter"])) { $where = ""; if ($_POST["price_start"]) $where = addWhere($where, "`price` >= '".htmlspecialchars($_POST["price_start"]))."'"; if ($_POST["price_end"]) $where = addWhere($where, "`price` <= '".htmlspecialchars($_POST["price_end"]))."'"; if ($_POST["manufacturers"]) $where = addWhere($where, "`manufacturer` IN (".htmlspecialchars(implode(",", $_POST["manufacturers"])).")"); if ($_POST["wifi"]) $where = addWhere($where, "`wifi` = '1'"); $sql = "SELECT * FROM `my_table`"; if ($where) $sql .= " WHERE $where"; echo $sql; }
много воды и не понятно чего ты хочешь. нужно наоборот. точнее могут не только лишь все, но не каждый может это делать.