Объедините SQL с PHP - PullRequest
       3

Объедините SQL с PHP

0 голосов
/ 23 сентября 2010
$months = array('January', ... , 'December');
$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY array_search($months,`MonthFrom`) `DayFrom`';

Не работает (я уже боялся этого), предполагается, что элементы сортируются сначала по позиции MonthFrom в массиве $ months, а те, у кого такая же позиция, должны сортироваться по DayFrom.Я знаю, что есть другие способы обработки дат, но для этого запроса я привязан к этой структуре дат, любая помощь приветствуется

Ответы [ 4 ]

3 голосов
/ 23 сентября 2010
$month_arr = array("January","February","March");

$months = implode("', '", $month_arr);

$query="SELECT * FROM residencies WHERE year = 2010 ORDER BY FIELD('MonthFrom', '$months'), `DayFrom`;
1 голос
/ 23 сентября 2010

Я исхожу из вопроса, что у вас есть поле месяца в базе данных, которое хранится в строковом формате, что, как сказали другие комментаторы, усложнило сортировку, поэтому вы пытались упорядочить месяцы, используямассив.

Другие придумали правильные способы достижения этого с учетом этого ограничения (я думаю, что ответ luckytaxi, вероятно, пока лучший), но я бы сказал, что если у вас есть месяцы, хранящиеся в базе данных в виде строкиформат, то у вас определенно плохой дизайн базы данных, и если у вас есть опция, вы должны рассмотреть возможность ее изменения.

MySQL может хранить полные даты, используя типы данных DATE или DATETIME, так что если вы сохраняете свойДни, месяцы и годы раздельно в тот момент, когда он появляется, вы должны перейти к хранению их вместе в одном поле.Вы по-прежнему можете запрашивать их отдельно, например, если вам нужен только месяц или в любой комбинации - MySQL имеет очень мощные функции обработки дат (как и PHP в этом отношении).

1 голос
/ 23 сентября 2010

Похоже, вы пытаетесь использовать функцию PHP внутри оператора SQL.Если вам нужно отсортировать по MonthFrom, который является названием месяца, попробуйте что-то вроде этого:

SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY FIELD(`MonthFrom`, 'January', ..., 'December'), `DayFrom`;

(вы можете заполнить остальные месяцы)

1 голос
/ 23 сентября 2010
$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY DATE_FORMAT(`MonthFrom`,"%M") `DayFrom`';

Но это будет сортировать их в алфавитном порядке названия месяца?Вы действительно нуждаетесь в этом?

Вы также можете отсортировать их по MonthFrom, и они преобразуют их в текст в вашем php-коде. "

...