Консультация № 43722
21.05.2006, 09:18
0.00 руб.
0 3 3
Здравствуйте, уважаемые эксперты! Нужна ваша помощь. Есть две таблицы MySQL. Одна - страны-производители(id, country), в другой - товары(id, country_id). Строю список checkbox`ов из стран(см. приложение). Подскажите, пожалуйста, как сформировать запрос для выборки товаров выбранных стран(возможно, еще нужно сменить способ построения списка группы checkox`ов)? Заранее благодарен!

Приложение:
echo "<form (с атрибутами)>";$result = mysql_query(‘SELECT * FROM goods‘);while ($row = mysql_fetch_array($result)){ echo "<input type=‘checkbox‘ name=‘".$row[‘id‘]."‘>".$row[‘country‘]."
";"; }

Обсуждение

Неизвестный
21.05.2006, 11:10
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!

В форму добавляешь также скрытые поля:
1. Поле MinId (минимальный номер идентификатора страны)
2. Поле MaxId (максимальный номер идентификатора страны)
Будем считать, что форма передается методом POST, а таблица товары называется tovary :)
<form action="select.php" method=post>
В файле select.php тогда должен быть подобный скрипт:
<?php
if isset(isset($_POST["MinID"]) and isset($_POST["MaxID"]))
{
$query="SELECT * FROM `tovary` WHERE";
for ($id=$_POST["MinID"],$id<=$_POST["MaxID"])
{
if (isset($_POST[$id]) and $_POST[$id])=="on")
{
$query=$query."`country_id`=".$id." OR";
}
}
$query=$query." 1=2"
}
?>

В конце $query - это твой запрос для выборки.

Я добавляю в $query в конце 1=2 на тот случай если не выбрано ни одного checkboxa.
В этом случае после WHERE в запросе не будет ничего и MySQL будет долго ругаться :)
А от того что я добавляю заведомо ложное условия результат не изменится.

Удачи!!!

Приложение:
<?phpif isset(isset($_POST["MinID"]) and isset($_POST["MaxID"])) { $query="SELECT * FROM `tovary` WHERE"; for ($id=$_POST["MinID"],$id<=$_POST["MaxID"]) { if (isset($_POST[$id]) and $_POST[$id])=="on") { $query=$query."`country_id`=".$id." OR"; } } $query=$query." 1=2" }?>
Неизвестный
21.05.2006, 11:54
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!
А где ты берешь список нужных стран?
Допустим, нужно выбрать страны 1, 5, 26
Тогда запрос такой:
$sql = ‘SELECT goods.id AS GoodID
FROM suppliers INNER JOIN goods ON suppliers.id=goods.country_id
WHERE suppliers.id = 1 OR suppliers.id = 5 OR suppliers.id = 26‘
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result))
{
echo $row[‘GoodID‘]."
\n";
}

Это выведет все товары, которые производят в странах с ID 1, 5, 26
Как работает SQL? Мы объединяем 2 таблицы по ID, потом выбираем нужные строки (т.е. с нужным ID)
После этого говорим что в запросе нам нужно только одно поле - ID товара, которое нам удобно называть по GoodID. Все. Потом уже идет пхп.
Посмотри справочники по SQL. И попробуй сложные SELECT-запросы в phpMyAdmin. ПомогаетУдачи.
Неизвестный
22.05.2006, 10:30
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!

Попробуйте таким способом:
echo "<form (с атрибутами)>";
$result = mysql_query(‘SELECT * FROM countries‘);
while ($row = mysql_fetch_array($result))
{
echo "<input type=‘checkbox‘ name=‘selected_country[]‘ value=".$row[‘id‘].">".$row[‘country‘]."
";
";
}

А анализировать надо так:

$country_list=implode(",", $_REQUEST["selected_country"]);
$result = mysql_query(‘SELECT * FROM goods where country_id in (".$country_list.")‘);
Форма ответа