Сортировка многомерного массива

Semen

Семён
Сортировка многомерного массива

Есть 2 таблицы
в первой общие данные типа Id, Name и т.д.
во второй Id, Date в формате 2002-10-10(Id не уникальное может повторяться с разными значениями Date)

Формирую многомерный массив
беру из первой Id, Name и т.д.
$array[$c]['Id']='value';
$array[$c]['Name']='value';
из второй по Id и году ищу Date
$array[$c]['Date']='value';

на выходе нужен отсортированный массив по Date
 

ForJest

- свежая кровь
Ниче не понял. Таблицы у тебя в общепринятом понимании слова или у тебя таблицы в БД?
Объясни подробнее задачу - моих телепатических способностей не хватает. Или наоброт сведи к более частному случаю.
 

ForJest

- свежая кровь
Чудесно. Продолдаем разговор.
Скорее всего тебе не нужно сортировать это средствами PHP.
Теперь давай сюда структуру таблиц и как они связаны между собой.
Можно только поля имеющие отношение к твоей задаче
info
(id int,
Name varchar(50),
...
)
table2
(id int,
dt_some date
)

Связь между ними какая? Или просто скажи что ты хочешь сделать. Может тебе нужно это делать по другому.
 

Semen

Семён
#
# Estrutura da tabela `contests`
#

CREATE TABLE contests (
contestId int(10) unsigned NOT NULL auto_increment,
contestName varchar(240) NOT NULL default '',
PRIMARY KEY (contestId),
KEY dirId (dirId),
KEY contestName (contestName),
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Estrutura da tabela `resultados`
#

CREATE TABLE resultados (
contestId int(10) unsigned NOT NULL default '0',
contestDate date NOT NULL default '0000-00-00',
resultType varchar(50) NOT NULL default '',
PRIMARY KEY (contestId,contestDate,resultType)
) TYPE=MyISAM;
 

ForJest

- свежая кровь
Ну и дык? какие проблемы?
PHP:
SELECT c.* r.* FROM contests c, resultados r 
WHERE c.contestId = r.contestId  ORDER BY r.contestDate
может быть ORDER BY r.contestDate DESC
 

Semen

Семён
Проблемы следующие:
из второй таблицы надо выбирать
WHERE(contestDate LIKE "%'.$DateYear.'%")
 

ForJest

- свежая кровь
А зачем тебе like?
WHERE (DATE_FORMAT(contestDate , '%y') = $DateYear) AND
(c.contestId = r.contestId)
Или если $DateYear у тебя четырехзначный
WHERE (YEAR(contestDate) = $DateYear) AND...

$DateYear без кавычек, чтоб мускул сравнивал их как числа
 

Semen

Семён
и если нет во второй таблице
ряда с contestId и contestDate
а данные из первой всё равно нужны
 

ForJest

- свежая кровь
Значит
PHP:
SELECT c.* r.* FROM contests c 
LEFT JOIN  resultados r  ON c.contestId = r.contestId
WHERE (YEAR(r.contestDate) = $DateYear) 
      OR (ISNULL(r.contestDate)=1)
ORDER BY r.contestDate
 

Semen

Семён
попробовал
но ряды из 1 таблицы, которые не имеют во 2 таблице
YEAR(r.contestDate) = $DateYear
не выбираются
 

RomikChef

Guest
а с какой стати они будут выбираться, если у тебя у самого условие стоит - выбитать только за это год????
убери тогда это условие.
 

ForJest

- свежая кровь
А что ты собираешься делать с этими записями? Как ты их собрался сортировать? Или тебе нужно отсортировать только те которые имею год?
Ты определись с этим.
Последний мой SQL можежшь считать бредом
 

Semen

Семён
хорошо с сасмого начала БД по соревнованиям
1 таблица- contests(contestId, contestName) - данные не изменяются

2 таблица- resultados(contestId, contestDate) - дата может изменяться каждый год, а может отутствовать в одном году и присутствовать в другом

мне нужно выводить список всех соревнований, но с датой за определенный год, и если нет даты то с пустой

я делаю так
запрашиваю в первой таблице contestId, contestName
далее во второй таблице ищу по contestId и DateYear
и всё это в массив
$contest[$c]['contestName']
$contest[$c]['contestDate']
$c++
и так далее

и не могу понять как выводить в порядке даты
 

RomikChef

Guest
SELECT c.* r.* FROM contests c
LEFT JOIN resultados r ON c.contestId = r.contestId
ORDER BY r.contestDate
 

ForJest

- свежая кровь
В общем алгоритм - находишь все те для которых дата есть.
Выводишь их отсортированные по датам.
По ходу формируешь список ID разделенный запятыми
Следеующий запрос выбираешь все те, которые не вошли в первый запрос. кодовое слово для размышлений NOT IN.
Читай про SELECT.
 

RomikChef

Guest
SELECT c.* r.* FROM contests c
LEFT JOIN resultados r ON c.contestId = r.contestId
WHERE (YEAR(r.contestDate) = $DateYear)
OR (r.contestDate)='')
ORDER BY r.contestDate
 

RomikChef

Guest
ForJest
а ты заметил, как мы бегаем, как собачки, и приносим ему в клювике то одно решение, то другое?
соблазн-то большой!
это тебе не ерег и оператор условного прехода.
тутнадо конкретно в теорию баз данных врубаться.
проше сунуть в зубы готовый код.

кстати твой запрос не бред. отличный запрос.
бред - это то, как сформулирована задача.
Я, например, считаю, что твой запрос не сработал не из принципа, а из частности.
может у него дата not null?
 
Сверху