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

Форум MySQL

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

 

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

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

тема: mysql как одним запросом получить данные таблицы и одновременно еще список свойств из другой таблицы
 
 автор: vbps   (10.12.2012 в 04:07)   письмо автору
 
 

mysql как одним запросом получить данные таблицы и одновременно еще список свойств из другой таблицы к этим данным?

например есть таблица:

_product:

id, name

и таблица:

_characteristic:

id, parent, description

parent - это привязка к id таблицы product.

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

  Ответить  
 
 автор: Sfinks   (10.12.2012 в 09:17)   письмо автору
 
   для: vbps   (10.12.2012 в 04:07)
 

Это обычный JOIN:
/*<?*/
SELECT *
FROM _product
JOIN _characteristic
ON _product
.id=_characteristic.parent

  Ответить  
 
 автор: vbps   (10.12.2012 в 21:17)   письмо автору
 
   для: Sfinks   (10.12.2012 в 09:17)
 

Спасибо

  Ответить  
 
 автор: oradev   (14.12.2012 в 22:25)   письмо автору
 
   для: vbps   (10.12.2012 в 21:17)
 

Все верно только для уверенности того, что не у всякого продукта могут быть характеристики, я бы добавил LEFT JOIN

  Ответить  
 
 автор: vbps   (17.12.2012 в 02:55)   письмо автору
 
   для: oradev   (14.12.2012 в 22:25)
 

Спасибо.
Я уже обратил на это внимание.

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

Не дергать же всю таблицу....

  Ответить  
 
 автор: Sfinks   (17.12.2012 в 09:23)   письмо автору
 
   для: vbps   (17.12.2012 в 02:55)
 

Сленгггг....

Что значит дергать? Обращаться ко всей таблице или считывать всю таблицу?
Если 1ое - то ДА, обращаясь ко всей таблице с лимитом вы получите только нужные строки. Если 2ое - то НЕТ, используя лимит вы не будете ДЕРГАТЬ всю таблицу. Или что-то еще третье?

  Ответить  
 
 автор: vbps   (17.12.2012 в 12:56)   письмо автору
 
   для: Sfinks   (17.12.2012 в 09:23)
 

Меня интересует 10 записей из таблицы _product со свойствами в любом количестве из другой таблицы.

  Ответить  
 
 автор: oradev   (17.12.2012 в 22:00)   письмо автору
 
   для: vbps   (17.12.2012 в 12:56)
 

два слова использовать LIMIT и ORDER BY

  Ответить  
 
 автор: vbps   (17.12.2012 в 23:31)   письмо автору
 
   для: oradev   (17.12.2012 в 22:00)
 

Может я неправильно задал вопрос, или просто чего то не до понимаю:

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

1, Name1
2, Name2

и в таблице _characteristic поля, где 1-ое id, 2-е parent, и 3-е item (название):

1, 1, 1-е свойство для первого
... ...
1, 1, 10-е свойство для первого
2, 2, 1-е свойство для второго
...

При запросе:

SELECT *
FROM _product
LEFT JOIN _characteristic
ON _product.id=_characteristic.parent 
LIMIT 0.10

так вот на выходе с limit 0,10 я получаю 10 записей c id=1 для _product, но разными свойствами, что то типа:

1, Name1, 1, 1-е свойство для первого
...
1, Name1, 1, 10-е свойство для первого

а вот запись с id 2 для _product cюда никак не попадает.
Мне же надо получить что то типа:

[1] => (
  name => Name1,
    characteristic => (
      1-е свойство для первого
      2-е свойство для первого
      ...
      10-е свойство для первого
  )
)

[2] => (
  name => Name2,
    characteristic => (
      1-е свойство для второго
      2-е свойство для второго
      ...
      128-е свойство для второго
  )
)

....



при использовании ORDER BY я получу только по одному свойству на запись, а это уже не удовлетворяет условию задачи.

  Ответить  
 
 автор: Sfinks   (18.12.2012 в 00:24)   письмо автору
 
   для: vbps   (17.12.2012 в 23:31)
 

Тогда можно воспользоваться вложенным подзапросом:
SELECT *
FROM( SELECT * FROM _product LIMIT 0,10 )temp
LEFT JOIN _characteristic
ON temp.id=_characteristic.parent

  Ответить  
 
 автор: vbps   (20.12.2012 в 01:21)   письмо автору
 
   для: Sfinks   (18.12.2012 в 00:24)
 

ОГРОМНОЕ СПАСИБО

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

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