Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод нескольких значений одного поля в одном запросе
 
 автор: kireyev   (26.07.2010 в 11:15)   письмо автору
 
 

есть таблица:

id object_id date
1 1 12.05.06
2 1 14.07.06
3 2 21.08.07
4 2 29.03.08
5 2 25.04.08

Можно ли написать запрос, чтобы получить:

object_id date1 date2 date3
2 21.08.07 29.03.08 25.04.08

Заранее спасибо!

  Ответить  
 
 автор: Valick   (26.07.2010 в 11:27)   письмо автору
 
   для: kireyev   (26.07.2010 в 11:15)
 

можно
SELECT * FROM tab WHERE object_id date=$date1
OR object_id date=$date2
OR object_id date=$date3

поле object_id date какого типа?

  Ответить  
 
 автор: kireyev   (26.07.2010 в 11:29)   письмо автору
 
   для: Valick   (26.07.2010 в 11:27)
 

DATE (dd.mm.yy)

  Ответить  
 
 автор: Valick   (26.07.2010 в 11:32)   письмо автору
 
   для: kireyev   (26.07.2010 в 11:29)
 

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

  Ответить  
 
 автор: kireyev   (26.07.2010 в 11:55)   письмо автору
 
   для: Valick   (26.07.2010 в 11:32)
 

id(int) object_id(int) date(date)

требуется выбрать все значения с object_id=2 в таблицу вида
object_id date1 date2 date3

  Ответить  
 
 автор: Valick   (26.07.2010 в 12:21)   письмо автору
 
   для: kireyev   (26.07.2010 в 11:55)
 

фу ты ну ты :)
ставте между названиями полей | а еще лучше дамп тпблицы.

SELECT * FROM tab WHERE object_id=2

выбирает как раз то что Вам нужно

  Ответить  
 
 автор: Trianon   (26.07.2010 в 11:42)   письмо автору
 
   для: kireyev   (26.07.2010 в 11:29)
 

>DATE (dd.mm.yy)

Что это за веселый тип такой?
Или может быть что это за СУБД?

  Ответить  
 
 автор: kireyev   (26.07.2010 в 11:56)   письмо автору
 
   для: Trianon   (26.07.2010 в 11:42)
 

поливать тока не надо, это тип DATE (дата)

  Ответить  
 
 автор: Valick   (26.07.2010 в 12:24)   письмо автору
 
   для: kireyev   (26.07.2010 в 11:56)
 

не спорьте с Трианоном, а внимально ловите каждое его слово... если он не доволен чем-то, то ищите ошибку.
DATE (yyyy-mm-dd)
расскажите о сущности этого поля, просто гораздо чаще используется DATETIME или TIMESTAMP

  Ответить  
 
 автор: kireyev   (26.07.2010 в 13:10)   письмо автору
 
   для: Valick   (26.07.2010 в 12:24)
 

Да в поле DATE хранится дата: день, месяц, год... и все

  Ответить  
 
 автор: Valick   (26.07.2010 в 13:31)   письмо автору
 
   для: kireyev   (26.07.2010 в 13:10)
 

Я Вас попросил рассказать о сущности этого поля... что это за дата? (день рождения (DATE), прием врача (DATETIME), потеря девственности (TIMESTAMP) и тд.)
и Вы упорно продолжаете писать день, месяц, год... - это не дата для MySQL
для MySQL дата это год - месяц - день (именно в такой последовательности и именно через тире и именно тип поля DATE)

  Ответить  
 
 автор: kireyev   (26.07.2010 в 13:53)   письмо автору
 
   для: Valick   (26.07.2010 в 13:31)
 

Прошу прощения, поле DATE это именно "день рождения" год-месяц-день

  Ответить  
 
 автор: kireyev   (26.07.2010 в 13:56)   письмо автору
 
   для: Valick   (26.07.2010 в 11:27)
 

"
можно
SELECT * FROM tab WHERE object_id date=$date1
OR object_id date=$date2
OR object_id date=$date3

поле object_id date какого типа?
"

В данном слуяае выведутся три строки, мне нужна одна строка, но так чтобы в ней появились столбцы date1, date2, date3

при этом object_id у всех одинаково (=2)

Такое возможно?

  Ответить  
 
 автор: Valick   (26.07.2010 в 14:04)   письмо автору
 
   для: kireyev   (26.07.2010 в 13:56)
 

этот запрос совсем неправильный... я просто в названиях полей запутался

SELECT * FROM tab WHERE object_id=2
этим запросом вы извлекаете данные (результатом запроса является таблица, хоотя спор по этому поводу так и не завершился)

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

  Ответить  
 
 автор: kireyev   (26.07.2010 в 14:10)   письмо автору
 
   для: Valick   (26.07.2010 в 14:04)
 

Вы поняли что я хочу? Можете помочь?

  Ответить  
 
 автор: Valick   (26.07.2010 в 14:15)   письмо автору
 
   для: kireyev   (26.07.2010 в 14:10)
 

я собственно говоря и помогаю, и для того чтобы дать правилный ответ задаю дополнительные вопросы, а не потому что мне абсолютно нехрен делать)

  Ответить  
 
 автор: kireyev   (27.07.2010 в 11:44)   письмо автору
 
   для: Valick   (26.07.2010 в 14:15)
 

а помощи все нет и нет... видимо задачка не выполнимая. спасибо.

  Ответить  
 
 автор: Trianon   (27.07.2010 в 12:03)   письмо автору
 
   для: kireyev   (27.07.2010 в 11:44)
 

Очевидно, что ответ, который Вы пытаетесь получить по первоначальной формулировке, должен иметь переменное количество столбцов, зависящее от числа строк одного объекта в таблице.
Такими запросами MySQL (и любая реляционная СУБД) не оперирует, поскольку число столбцов (атрибутов) в реляционной модели - фиксировано изначально.

  Ответить  
 
 автор: Valick   (27.07.2010 в 12:53)   письмо автору
 
   для: Trianon   (27.07.2010 в 12:03)
 

При помощи хранимой процедуры можно создать временную таблицу сделать нужную выборку добавлять в цикле поле и значение во временную таблицу, а затем вернуть результат одной строкой?
Я понимаю что бред, но чисто теоритически? :)

  Ответить  
 
 автор: Trianon   (27.07.2010 в 13:24)   письмо автору
 
   для: Valick   (27.07.2010 в 12:53)
 

Одной строкой можно и проще результат вернуть, без нарушения модели, например, с помощью GROUP_CONCAT, только зачем?
Последовательными mysql_fetch_assoc любой одномерный результат спокойно расхлебывается в двумерный выход без лишних наворотов и усложнений.
Проблема же не в том, что невозможно сделать то, что автор просит.
Проблема в том, что автору это не нужно.

А чисто теоретически - нельзя. Теория реляционных баз данных - штука твердая.
Чисто практически можно. Но не нужно.

  Ответить  
 
 автор: Valick   (27.07.2010 в 13:27)   письмо автору
 
   для: Trianon   (27.07.2010 в 13:24)
 

GROUP_CONCAT - во блин... опять прошляпил функцию.
>Проблема в том, что автору это не нужно.
вот я у него и спрашиваю зачем это нужно, что бы найти и указать ошибку в логике.

Искал что-нибудь подобное в агрегатных функциях, а она наверно идет отдельной статьей
http://webi.ru/webi_articles/8_14_f.html

  Ответить  
 
 автор: Valick   (27.07.2010 в 12:05)   письмо автору
 
   для: kireyev   (27.07.2010 в 11:44)
 

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

  Ответить  
 
 автор: kireyev   (28.07.2010 в 07:18)   письмо автору
 
   для: Valick   (27.07.2010 в 12:05)
 

Спасибо, я понял.!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования