Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157

Как из базы вывести один раз запись если их несколько?

11.08.2017, 15:00. Показов 1843. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Ситуация такая, в есть таблица attendance у которой есть поле date, дата храниться как yyyy-mm-dd (2017-08-11)
Даты разные, меня волнует месяц! Мне нужно пройтись по таблице и вывести месяца без повторов
Например:
id | date | idPerson | status |
1 | 2017-08-08
2 | 2017-07-11
3 | 2017-08-15
4 | 2017-06-11
5 | 2017-12-04
6 | 2017-08-21
так вот получить из этого списка нужно такой список
06 -2017
07 -2017
08 -2017
12 -2017
Все по одному разу
Сейчас у меня выводятся просто все
PHP
1
2
3
4
5
6
7
            $sql = "SELECT * FROM attendance WHERE idPerson=?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$idPerson]);
            while ($dateSort = $stmt->fetch(PDO::FETCH_ASSOC)){
               echo "<option>". date('m-Y', strtotime($dateSort['dateTraining']))."</option>";
            }
            $stmt = null;
Как сделать что бы один и тот же месяц не повторялся ??
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.08.2017, 15:00
Ответы с готовыми решениями:

Если элемент исходной последовательности встречается один раз, то заменить его на 1, если несколько, то 0
1)В последовательности нет 0 и 1. Получить новую по следующей схеме: Если элемент исходной последовательности встречается один раз, то...

Вывести числа, которые встречаются в массиве несколько раз / один раз
дан массив состоящий из 100 целых чисел. а)Вывести все числа,которие встречаются в етом массиве несколько раз б)Вывести все...

Ввести массив из 100 целых чисел, сначала вывести встречающиеся несколько раз, а затем те, что встречаются один раз
ввести массив из 100 целых чисел, сначала вывести встречающиеся несколько раз, а затем те, что встречаются один раз

11
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
11.08.2017, 15:11
Можно было бы посоветовать distinct или GROUP BY, но у вас тока месяц повторяется.
Я вижу только вариант сначала получить все значения, потом какой-нибудь регуляркой убрать все дупликаты!
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
11.08.2017, 15:58
Цитата Сообщение от andyyy Посмотреть сообщение
Можно было бы посоветовать distinct или GROUP BY, но у вас тока месяц повторяется.
а чем тут GROUP BY не подходит?
0
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
11.08.2017, 16:02  [ТС]
Igsit, а как с GROUP BY сделать??
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
11.08.2017, 16:03
Лучший ответ Сообщение было отмечено DJestin как решение

Решение

PHP
1
$sql = "SELECT SUBSTRING(date,6,2) AS my_month FROM attendance WHERE idPerson=? GROUP BY my_month";
1
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
11.08.2017, 16:08  [ТС]
Igsit, Хм сделала так
PHP
1
2
3
4
5
6
7
            $sql = "SELECT SUBSTRING(date,6,2) AS my_month FROM attendance WHERE idPerson=? GROUP BY my_month";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$idPerson]);
            while ($dateSort = $stmt->fetch(PDO::FETCH_ASSOC)){
               echo "<option>". date('m-Y', strtotime($dateSort['date']))."</option>";
            }
            $stmt = null;
И получила 4 раза 01.1970
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
11.08.2017, 16:17
Цитата Сообщение от DJestin Посмотреть сообщение
И получила 4 раза 01.1970
видимо date воспринимается как функция sql, попробуйте так:
PHP
1
$sql = "SELECT SUBSTRING(`date`,6,2) AS my_month FROM attendance WHERE idPerson=? GROUP BY my_month";
или так:
PHP
1
 $sql = "SELECT SUBSTRING(attendance.date,6,2) AS my_month FROM attendance WHERE idPerson=? GROUP BY my_month";
1
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
11.08.2017, 16:21  [ТС]
Igsit, нет дело не в этом у меня не date а dateTraining на самом деле, я просто тут сократила название
Вот echo "<option>". $dateSort['my_month']."</option>"; выводится только месяц. Так как и нужно каждый по одному разу , а можно к ним еще как то год приставить, что бы так было 'm-Y' (08-2017)??.
PHP
1
2
3
4
5
6
7
            $sql = "SELECT SUBSTRING(dateTraining,6,2) AS my_month FROM attendance WHERE idPerson=? GROUP BY my_month";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$idPerson]);
            while ($dateSort = $stmt->fetch(PDO::FETCH_ASSOC)){
               echo "<option>". $dateSort['my_month']."</option>";
//               echo "<option>". date('m-Y', strtotime($dateSort['my_month']))."</option>";
            }
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
11.08.2017, 16:23
Лучший ответ Сообщение было отмечено DJestin как решение

Решение

Цитата Сообщение от DJestin Посмотреть сообщение
а можно к ним еще как то год приставить, что бы так было 'm-Y (08-2017)'?
конечно можно:
PHP
1
$sql = 'SELECT CONCAT(SUBSTRING(dateTraining,6,2), "-", SUBSTRING(dateTraining,1,4)) AS my_month FROM attendance WHERE idPerson=? GROUP BY my_month';
кавычки только правильные поставьте, ну или экранируйте их
1
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
11.08.2017, 16:51  [ТС]
Igsit, спасибо большое
А можно еще вопрос, как мне в обратную сторону сделать выборку??
Я имею ввиду что это у меня селект и в value я получаю месяц и год (value='". $dateSort['my_month']."' -> 08-2017 )
а как мне сделать выборку из этой же таблице все даты где этот месяц и год ?

PHP
1
2
3
4
5
6
  $sql = "SELECT * FROM attendance WHERE idPerson=? AND dateTraining=?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$idPerson,   ?  ]);
            while ($dateSort = $stmt->fetch(PDO::FETCH_ASSOC)){
               echo  $dateSort['dateTraining'];
            }
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
11.08.2017, 17:01
Лучший ответ Сообщение было отмечено DJestin как решение

Решение

если пойдёт поиск по такому виду "2017-08" то так:
PHP
1
2
3
4
5
6
 $sql = "SELECT * FROM attendance WHERE idPerson=? AND SUBSTRING(dateTraining,1,7)=?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$idPerson,   "2017-08"  ]);
            while ($dateSort = $stmt->fetch(PDO::FETCH_ASSOC)){
               echo  $dateSort['dateTraining'];
            }
а если нужно также как выводили т.е. "08-2017" то так
PHP
1
2
3
4
5
6
 $sql = "SELECT * FROM attendance WHERE idPerson=? AND CONCAT(SUBSTRING(dateTraining,6,2), "-", SUBSTRING(dateTraining,1,4))=?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$idPerson,   "08-2017"  ]);
            while ($dateSort = $stmt->fetch(PDO::FETCH_ASSOC)){
               echo  $dateSort['dateTraining'];
            }
1
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
14.08.2017, 09:25  [ТС]
Igsit, Спасибо большое))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2017, 09:25
Помогаю со студенческими работами здесь

Если в массиве максимальный элемент встречается несколько раз, вывести нужно минимальный индекс
Всем привет. Есть задание найти индекс максимального элемента в массиве. И еще несколько условий: 1)если массив пустой вывести -1; ...

Если строка- запись целого числа, то вывести 1; если вещественного , то вывести 2; если строку нельзя преобразовать в число, то вывести 0.
Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если...

Как несколько раз извлечь данные из базы по двум условиям?
СЦЕНАРИЙ 1. Перейти в ПОИСКОВИК &quot;https://yandex.ru&quot; 2. Ввод ПОИСКОВОЙ ФРАЗЫ 3. Нажатие &quot;ВВОД&quot; Далее с...

Как использовать один и тот же case в switch несколько раз?
Как использовать один и тот же case в switch несколько раз?

Как ввести в TextBox сразу несколько значений за один раз
Можно ли сделать не через массив, многочисленный ввод значений в один элемент(например TextBox)? для задания В простую переменную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru