2012-03-19 3 views
1

Я постараюсь объяснить это как можно лучше.таблица фильтров WHERE 1 столбец = столбец из другой таблицы

У меня есть ниспадающий населенный пункт с названиями стран из одного стола. Когда кто-то выбирает Канаду, мне нужно второе раскрывающееся меню, чтобы отфильтровать результаты из второй таблицы, называемой регионами.

Вот код, я использую

<?php 
$query="SELECT * FROM location_region"; 

$result = mysql_query ($query); 
echo "<select id='province_select' name='province_select' class='province_select' style='width:540px' value=''></option>"; 

while($nt=mysql_fetch_array($result)){ 
echo "<option value=$nt[value]>$nt[name]</option>" 

} 
echo "</select>"; 
?> 

Я знаю, что я должен изменить запрос, но я могу сделать что-то вроде:

$query="SELECT * FROM location_region WHERE country EQUALS value FROM location_country"; 

Это не работает, но там еще где писать? Таблица «location_region» имеет столбец с именем «страна», которая должна быть равна графе «значение» из таблицы «location_country»

Спасибо, как всегда

EDIT: Для Гершон Herczeg здесь структура таблицы

location_country нечто похожее на:

ID name   value 
1 Canada  CA 
2 Great Britain GB 
3 United States US 

location_region похож:

ID name    value country 
1 Alberta   AB  CA 
2 Alabama   AL  US 
3 British Columbia BC  CA 
+1

Вы отправляете страницу на сервер при первом изменении 'select'? Или вы делаете вызов AJAX, когда он меняет динамическое заполнение второго 'select'? В зависимости от того, как вы упорядочиваете свои изменения кода. – David

ответ

2

Да, это называется внутренним соединением - оно эффективно даст вам одну большую коллекцию строк, сопоставляемую с указанным столбцом или столбцами.

SELECT lr.* 
FROM location_region lr 
INNER JOIN location_country lc on lr.country = lc.country 
WHERE lr.country = <selected value from dropdown> 

Замена в выбранном значении в запросе, это должно дать вам все, что из таблицы областей для страны, которую вы выбрали.

Однако, если у вас есть столбец страны в таблице регионов, который соответствует значениям в раскрывающемся списке, почему бы вам просто не выбрать из этого для начала?

SELECT * 
FROM location_region 
WHERE country = <selected value from dropdown> 
+0

Спасибо Мост, я еще не имел дело с JOINS, это имеет смысл, я собираюсь найти учебник, Id скорее знаю, а затем просто получите код, спасибо. –

+0

Следовательно, почему я попытался объяснить это немного - есть и другие типы объединений, поскольку, когда вы хотите, чтобы все строки из одной или обеих таблиц (ов), даже если нет совпадений в соответствующих, все зависит от ваших потребностей , – Bridge

+0

Эй, спасибо, много, прошел через некоторые уроки, и это получилось ... несколько ...Однако это открывает много возможностей для экспериментов, поблагодарив за то, что потратили время, чтобы объяснить это мне. –

0

Ну, чтобы получить полный ответ, что нужно размещать поля в ваших двух таблиц, но он должен что-то в этом роде:

SELECT location_region.name FROM location_region LEFT JOIN location_country ON location_regions.country = location_country.value 
1

Запрос можно записать так:

$query="SELECT * FROM location_region, location_country WHERE location_region.country = location_country.value WHERE location_region.country = {USER INPUT}" 
+0

Спасибо, что почти работает, однако он все еще показывает все регионы, так как у меня есть регионы для нескольких стран, есть ли способ ограничить его только этими результатами? –

+0

Да, вы можете добавить другое предложение where для поиска по стране. Я обновил свой ответ. – jasonlfunk

+0

Спасибо Джейсон Я быстро научился благодаря таким людям, как ты. –

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