Делаю страницу товаров, пытаюсь вывести с БД инфу с товаром объединив две таблицы в одном запросе выбрав нужные столбцы и перегнав в ассоциативный массив: Код (Text): function getProductsByCat($itemId) { $sql = "SELECT t1.ID, t1.NAME as NAME, t1.PICTURE as PICTURE, t1.PRICE_RUS as PRICE_RUS, t1.ARCHIVE as ARCHIVE, t1.GROUP_NAME as GROUP_NAME, t1.ID_PRODUCT as ID_PRODUCT1, t2.ID_PRODUCT as ID_PRODUCT2, t2.ID_GROUP_OF_PRODUCTS as ID_GROUP_OF_PRODUCTS FROM `product` t1 LEFT JOIN `link_gr-of-prod_with_prod` t2 ON t1.ID_PRODUCT = t2.ID_PRODUCT WHERE `ID_GROUP_OF_PRODUCTS` = '{$itemId}' "; $rs = mysql_query($sql); return createSmartyRsArray($rs); } Код (Text): function createSmartyRsArray($rs) { if(!$rs) return false; $smartyRs = array(); while ($row = mysql_fetch_assoc($rs)) { $smartyRs[] = $row; } return $smartyRs; } получилось вывести данные, НО мне необходимо теперь с другой таблице добавить главное изображение товара так, чтобы оно соответсвовало id продукта в таблице имеется имя продукта, id продукта поле с изображением. Мне нужно добавить в ассоциативный массив новое значение с изображением. немного запутался, подскажите.
изображение хранится в бд? но так или иначе нужно всего лишь добавить t13.IMAGE as IMAGE `ТАБЛИЦА_С_КАРТИНКОЙ`
я пишу отдельную функцию, где обращаюсь к таблице изображений продукта, по id_product должен выбрать товар и с колонки изображений взять название файла если оно отсутствует подставить другое изображение по умолчанию пример: Код (Text): function give_big_picture($object_id){ $sql= 'SELECT * FROM `pictures` WHERE ID_PRODUCT='.$object_id.' ORDER BY `ORDERA` DESC '; $rs = mysql_query($sql); if (mysql_num_rows($rs)!=0){ while($row = mysql_fetch_assoc($rs)) { return $row[PICTURE_BIG]; } } else{ return "img_default.jpg"; } } и подставить его в карточку с товаром, но эта функция возвращает false, мне нужно этот запрос связать с запросом продуктов которые выводятся на странице
@AlexsaiL неверный код PHP: $rs = mysql_query($sql); if (mysql_num_rows($rs)!=0){ while($row = mysql_fetch_assoc($rs)) { if($row[PICTURE_BIG]!=null){ return $row[PICTURE_BIG];} } return default; } } --- Добавлено --- хотя это довольно таки не оптимально
в общем мне надо сделать чтобы этот вот запрос к бд, был связан с самым первым запросом в первом моем сообщении, получал Id товара от первого запроса и в функции function give_big_picture ... выбирал нужное изображение и возвращал
id продукта совпадают, но дело в том, что у одного Id продукта могут быть несколько изображений в бд, поэтому с помощью такого запроса Код (Text): SELECT * FROM `pictures` WHERE ID_PRODUCT='.$object_id.' ORDER BY `ORDERA` DESC такой сортировки он возвращает нужное изображение --- Добавлено --- мне надо с первого запроса БД брать id продукта и по этому id во втором запросе подбирать изображение, после возвращать, а так как я уже выше упоминал, такой запрос возвращает false(0) так как он не получает id передаваемого продукта и не знает что возвращать с бд
ну надо тестить, смотреть как работать запрос будет. Я встречал как в одной функции обращаются к бд и внутри идет обращение к другой функции которая принимает какое то свойство от первой функции и на её основе , тоже обрабатывает запрос к бд и возвращает результат добавляя его в ассоциативный массив первого запроса, вот в таком плане бы реализовать.
@AlexsaiL ну ты в принципе можешь написать типа 'select ..... id=my_func('select..)..' но зачем тебе такие сложности если просто нужно получить ячейку из таблицы, при том что к этой таблице ты уже обращаешся? не проще ли поместить все полученные данные в массив а затем просто проверить получено ли изображение а если нет то заменить на дефолтное
объединял я три таблицы с помощью JOIN выводил нужный массив, вот только он мне выводил столько товаров с одним именем, сколько фото в бд указано, возможно из-за того, что Id_product в каждой таблице присутствует, хз... --- Добавлено --- вот этот запрос : Код (Text): SELECT t1.ID_PRODUCT, t1.NAME as NAME, t1.PICTURE as PICTURE, t1.PRICE_RUS as PRICE_RUS, t1.ARCHIVE as ARCHIVE, t1.GROUP_NAME as GROUP_NAME, t2.ID_PRODUCT, t2.ID_GROUP_OF_PRODUCTS as ID_GROUP_OF_PRODUCTS, t3.ID_PRODUCT, t3.PICTURE_BIG as PICTURE_BIG, t3.ID as ID, t3.ORDERA as ORDERA FROM `product` t1 LEFT JOIN `link_gr-of-prod_with_prod` t2 ON t1.ID_PRODUCT = t2.ID_PRODUCT RIGHT JOIN `pictures` t3 ON t1.ID_PRODUCT = t3.ID_PRODUCT WHERE ID_GROUP_OF_PRODUCTS = '{$itemId}' ORDER BY `ORDERA` DESC"; $rs = mysql_query($sql); return createSmartyRsArray($rs); --- Добавлено --- Но из-за малого знания и практики, не знаю как сделать правильно
@AlexsaiL ну есть вариант отсортировать полученый массив, но это не рационально,- будет лишний трафик.. и LIMIT здесь не поможет... разве что както HAVING MIN(ID) здесь и мои навыки иссякли. я бы делал вторым запросом