"чистка" массива (нужна помощь)

musicant

Новичок
"чистка" массива (нужна помощь)

Добрый вечер!

У меня на странице два селекта -" страны" и "даты вылета".

Получаю из MySQL тур фирмы три массива $key (номер тура), $counkey (номер страны), $dat(даты вылетов)
Вывожу даты во втором Select (а в качестве value пишу соответствующее значение из $key)
На каждый тур приходится несколько возможных дат вылета, даты из разных туров часто совпадают и в итоге я получаю список с повторяющимися по несколько раз датами.
Если использовать array_unique для $dat - то вероятно потеряется связь с ключами из массива $key....

Как быть?

PHP:
<?php
$sql = "SELECT * FROM `date` ORDER BY data";
$result=mysql_query($sql);
while ($row = mysql_fetch_assoc($result)){
$key=$row['key'];
$counkey=$row['counkey'];
$dat =$row['data'];
print"<option class=\"sub_$conkey\" value=\"$key\">$dat</option>";

}?>
 

Вурдалак

Продвинутый новичок
Неправильная организация базы данных. По идее, должна быть таблица с турами (tours), в которой есть уникальный идентификатор, номер страны (country_id), дата вылета (date) и прочее. Никаких таблиц "dates". В крайнем случае она очень неудачно названа, потому что таблица описывает другую сущность.
 

musicant

Новичок
Вурдалак
Я первый раз делаю базу и поиск для тур фирмы, поэтому вполне возможно, что тут "все не так как надо".
В таблице tours каждый тур - отдельная строчка, а даты вылетов идут по несколько штук для каждого тура, поэтому я и вынес их в отдельную таблицу и добавил туда номер страны и номер тура к каждой дате.

AmdY
Спасибо за "ценный" ответ. Как сделать два связанных селекта - я уже знаю. Проблема несколько в другом.....
 

Вурдалак

Продвинутый новичок
Автор оригинала: musicant
Вурдалак
Я первый раз делаю базу и поиск для тур фирмы, поэтому вполне возможно, что тут "все не так как надо".
В таблице tours каждый тур - отдельная строчка, а даты вылетов идут по несколько штук для каждого тура, поэтому я и вынес их в отдельную таблицу и добавил туда номер страны и номер тура к каждой дате.
— а я не совсем понимаю, что такое «тур», если на него может быть несколько вылетов. Я понимаю под этим словом путешествие, которое, можно сказать, начинается с определенной даты — даты вылета.
 

ps2007

Новичок
Спасибо за "ценный" ответ. Как сделать два связанных селекта - я уже знаю. Проблема несколько в другом.....
Ты пришел сюда с вопросом, так что не нужно тут язвить.

Я хотел ответить на твой вопрос, но я его не понял. Перечитал раз пять, не помогло.

>> Получаю из MySQL тур фирмы три массива $key (номер тура), $counkey (номер страны), $dat(даты вылетов)
Не нужно врать, это не массивы, это обычные переменные.

Ты можешь описать задачу простыми словами (без упоминания PHP и MySQL). При описании задачи нужно представить себе, что человек, которому ты рассказываешь ничего не знает о самой постановке задачи и проблеме.
 

dimagolov

Новичок
и в итоге я получаю список с повторяющимися по несколько раз датами.
Если использовать array_unique для $dat - то вероятно потеряется связь с ключами из массива $key
делай
[sql]SELECT GROUP_CONCAT(`key`), ... GROUP BY `data`[/sql]

-~{}~ 28.01.10 17:43:

:) вот что бывает, когда поля именуешь идентично служебным словам
 

musicant

Новичок
dimagolov
Хорошая функция! не знал :)
Но не то.
получается, что:
Есть список стран, список туров для каждой страны и список возможных дат вылета для каждого тура.
Для удобства поиска я предлагаю пользователю сначала выбрать страну, потом предполагаемую дату вылета и уже основываясь на дате и стране загружается список туров.
Все сделал, и все работает, но в списке с датами много повторений (т.к. в список загружаются даты по всем турам в выбранную страну).
 

AmdY

Пью пиво
Команда форума
база я так понимаю не нормализована
SELECT DISTINCT(`date`) FROM tbl
строим селект, выбрали -> ajax -> SELECT DISTINCT(`country`) FROM tbl WHERE `date`= ?
строим селект, выбрали -> ajax -> SELECT * FROM tpl WHERE `date` = ? AND country = ?
 
Сверху