xandeadx.ru Блог музицирующего веб-девелопера

MySQLВычислить возраст по дате рождения

Опубликовано в

Более универсальный вариант SQL запроса из официальной документации:

SELECT
  birthday,
  (
    (YEAR(CURRENT_DATE) - YEAR(birthday)) -                             /* step 1 */
    (DATE_FORMAT(CURRENT_DATE, '%m%d') < DATE_FORMAT(birthday, '%m%d')) /* step 2 */
  ) AS age
FROM users

Смысл следующий — первым шагом вычитаем из текущего года, год рождения, вторым шагом вычитаем единичку если дня рождения в этом году ещё не было.

birthday это поле с датой в любом валидном формате (не timestamp), например 1989-07-22 или даже 1989-07-22T00:00:00.

MySQLВыборка постов с определёнными тегами

Опубликовано в

Есть таблицы posts (id, title, text) и tags (id, name), связанные отношением многие-ко-многим с помощью таблицы posts_tags (post_id, tag_id).

Задача — выбрать посты с определёнными тегами.

Вариант 1:

SELECT p.id, p.title, p.text
FROM posts p
INNER JOIN posts_tags pt1 ON pt1.post_id = p.id
INNER JOIN posts_tags pt2 ON pt2.post_id = p.id
WHERE
    pt1.tag_id = ID_ПЕРВОГО_ТЕГА AND
    pt2.tag_id = ID_ВТОРОГО_ТЕГА

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

MySQLВыборка людей определённого возраста

Опубликовано в

Допустим есть таблица users:

CREATE TABLE `users` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
    `birthday` DATE NOT NULL 
) ENGINE = MYISAM

Выборка людей которым на данный момент есть 26 лет

$yearOfBirth = 26;
$date1 = date((date('Y') - $yearOfBirth - 1) . '-m-d');
$date2 = date((date('Y') - $yearOfBirth) . '-m-d');
$sql = "
    SELECT * FROM `users`
    WHERE `birthday` BETWEEN '$date1' AND '$date2'
";

Выборка людей которым на данный момент от 25 до 27 лет

$yearOfBirth1 = 25;
$yearOfBirth2 = 27;
$date1 = date((date('Y') - $yearOfBirth2 - 1) . '-m-d');