Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить сложный запрос 
V
    Опции темы
MrImho
Дата 5.1.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



Здравствуйте, раньше мне хватало простых запросов, но сейчас из-за специфики задания, нельзя использовать простые запросы в связке с php.
Вот как выборка происходит на простых запросах:
Код

$get_tov=mysql_query("SELECT * FROM cat_tov WHERE catID='111'");
while($res_tov=mysql_fetch_array($get_tov))
{
$get_foto_tov=mysql_query("SELECT * FROM cat_tov_img WHERE tovID='".$res_tov[ID]."' AND vid='mini'");
$res_foto_tov=mysql_fetch_array($get_foto_tov)
$res_tov['img']=$res_foto_tov['tovID'].$res_foto_tov[name].".".$res_foto_tov[vid].".".$res_foto_tov[ext];
$content['tov_info'][]=$res_tov;
}

Нужно сделать тоже самое но за 1 запрос к mysql, что-то типа:
SELECT * FROM cat_tov INNER JOIN cat_tov_img USING(ID), но этот запрос все строки из таблицы  cat_tov_img добавляет в таблицу cat_tov, а мне надо чтобы добавилась ещё 1 колонка с именем img, вообщем смотрите выше, то что я написал работает.
Незнаю понятно ли объяснил, попробую ещё подругому:
создать колонку img и записать туда объединение значений колонок из таблицы cat_tov_img, результат будет выглядеть я думаю так:
[img]=>Array
(
[tovID]=>...
[name]=>...
[vid]=>...
[ext]=>...
)
Примечание: в таблице cat_tov колонки img нету, т.е. её нужно создать и добавить в поток и этот img должен быть в виде массива что я написал выше.
Всем спасибо за ответы.

Это сообщение отредактировал(а) MrImho - 5.1.2010, 11:49
PM MAIL   Вверх
Ипатьев
Дата 5.1.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



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


Это сообщение отредактировал(а) Ипатьев - 5.1.2010, 12:09
PM MAIL   Вверх
ТоляМБА
Дата 5.1.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



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


PM   Вверх
MrImho
Дата 6.1.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



структура таблицы 1 (cat_tov) сокращённая, но этого будет достаточно:
ID | name

1  | имя 1
2  | имя 2
структура таблицы 2 (cat_tov_img) сокращённая, но этого будет достаточно:
ID | name              | ext | vid   | tovID

1  | _fghftyikyuikli  | jpg | mini |  1
2  | _fhkjtryjfihyit   | jpg | src   |  1
3  | _dthyjkshtrg   | gif   | mini |  2
4  | _dfghdghjgh   | gif   | src   |  2

Если так, как я выше написал нельзя, надо настоящие имена из таблицы 2 заменить на псевдонимы (если это возможно), ато иначе запись из таблицы 2 поле "name" заменит запись из таблицы 1 поле "name". Можно ли тогда их объединить следующим образом:
Запрос извлекает все записи из таблицы 1 и все записи из таблицы 2, где tovID (поле таблицы 2)=ID (поле таблицы 1) и vid (поле таблицы 2)=mini. Вот что хотелось бы увидеть (использую записи приведённые выше):
ID | name |  iname (псевдоним поле name 2 таблицы) | ext | vid 
1  |  имя 1 | _fghftyikyuikli                                               | jpg | mini
2  |  имя 2 | _dthyjkshtrg                                                | gif   | mini
Т.е к таблице 1 добавить несколько полей таблицы 2, а название некоторых заменить на псевдонимы (в нашем случае только 1 поле "name" на "iname").
Всем спасибо за участие.

PM MAIL   Вверх
ТоляМБА
Дата 6.1.2010, 10:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Код
Select cat_tov.ID, cat_tov.name, cat_tov_img.name AS iname, cat_tov_img.ext, cat_tov_img.vid
From cat_tov 
Inner Join cat_tov_img
On cat_tov.ID=cat_tov_img.tovID
Where cat_tov_img.vid="mini"

PM   Вверх
Ипатьев
Дата 6.1.2010, 11:25 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



Весь вопрос в том, сколько картинок нам надо к каждому товару - одну или несколько...
А вся пробема - в том, что люди, приходящие задать вопрос, не умеют сформулировать решаемую задачу целиком. 
Ведь что, казалось бы, проще, чем написать человеческим языком - "нужно вывести список соваров с одной картинкой к каждому" или "нужно то-то и то-то". 
Но нет - почему-то обязательно надо писать в терминах, смысл которых автор не понимает, еще и выкидывая половину информации, "это неважно".

Это сообщение отредактировал(а) Ипатьев - 6.1.2010, 11:49
PM MAIL   Вверх
MrImho
Дата 6.1.2010, 19:25 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



ТоляМБА спасибо, помогло, но сразу другой косяк, если у товара нет картинки, он не извлекает запись о нём, мне кажется это из-за записи:
Код

Where cat_tov_img.vid="mini"

Всё правильно, все логично, только запись товара должна извлекаться, даже если картинки нет.
это условие глобально для всей записи или локально?
Можно ли как-то подругому?

Это сообщение отредактировал(а) MrImho - 6.1.2010, 19:28
PM MAIL   Вверх
ТоляМБА
Дата 6.1.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Код
Select cat_tov.ID, cat_tov.name, cat_tov_img.name AS iname, cat_tov_img.ext, cat_tov_img.vid
From cat_tov 
LEFT Join cat_tov_img
On (cat_tov.ID=cat_tov_img.tovID) AND (cat_tov_img.vid="mini")


PM   Вверх
MrImho
Дата 6.1.2010, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



ТоляМБА спасибо большое, Вы очень помогли.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.