|
|
|
| Помогите сформировать запрос есть две таблицы : image, и tovar
в таблице tovar поля:
ID, User, price, name, opisanie.
в таблице Image :
ID,images.
делаю такой запрос :
SELECT * FROM image LEFT JOIN tovar USING(id) where `ID`='$op'
|
где id Берется из глобального массива но это не столь важно, суть проблемы в том что хочу вывести картинки из таблицы image а описание из таблицы tovar, но при выводе например трех картинок из таблицы image дублируется так же все из таблицы tovar
Как сделать так что бы выводились картинки например 3 штуки а описание только одно!
ID в таблице image может быть одинаковое так как выборка идет по id | |
|
|
|
|
|
|
|
для: Lost_hlq
(06.12.2014 в 20:40)
| | Имеет смысл привести полную структуру таблиц, и кроме того по несколько строк из каждой.
Из оисания неясно, что является первичным ключом в каждой из таблиц.
Если и в той, и в другой таблице первичный ключ - ID , то в предложении USING его тоже стоит написать заглавными буквами. | |
|
|
|
|
|
|
|
для: Trianon
(07.12.2014 в 00:44)
| | таблица tovar:
ID | User | price | name | opisanie | url | categories
1 | | | | | |
2 |
Таблица Image:
ID | images
1 | 1.jpg
1 | 3.jpg
1 | 6.jpg
2 | 7.jpg
тоесть они связаны по ID , и в таблице image id может одинаковым , я хочу вывести определенного товара картинки.Но когда вывожу выводится три раза например и описание так как три картинки привязаны по одному и тому же ID , и вот как избавится от этого дублирования | |
|
|
|
|
|
|
|
для: Lost_hlq
(07.12.2014 в 13:10)
| | приведите пожалуйста структуру!
структуру можно посмотреть с помощью запроса
SHOW CREATE TABLE `ИмяТаблицы`;
|
Что является первичным ключом второй из таблиц?
Фраза "таблицы связываются по ID" - пустой звук.
Ни таблицы сами по себе (ни картинки из них) никуда не связываются, пока запрос на сервер не послан.
Запрос написать вы не можете, иначе бы сюда не писали. Так что забудьте о том, что они как-то связываются, пока не определитесь с ключами.
и наконец.
На примере строк таблиц, которые вы привели, какой отклик дает ваш запрос?
А какой отклик вы ожидаете, то есть который бы вас устроил? | |
|
|
|
|
|
|
|
для: Trianon
(07.12.2014 в 13:24)
| | вот структура таблицы tovar:
CREATE TABLE `tovar` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`User` varchar(50) NOT NULL,
`price` int(11) NOT NULL,
`name` varchar(200) NOT NULL,
`opisanie` text NOT NULL,
`url` varchar(1000) NOT NULL,
`categories` varchar(1000) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=327 DEFAULT CHARSET=cp1251
|
таблицы image:
CREATE TABLE `image` (
`ID` int(255) NOT NULL,
`images` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
|
вот так вывожу нужную мне информацию:
<?php
$result_set=$bd->query("SELECT DISTINCT * FROM image LEFT JOIN tovar USING(id) where `ID`='$op' ");
while ($row=$bd->fetch_assoc($result_set))
{
$x=$row['images'];
$y=$row['name'];
$z=$row['opisanie'];
$p=$row['price'];
$url=$row['url'];
$id=$row['ID'];
$u=$row['User'];
echo "
<div class='lock_image'>
<img class='image' src='$x'>
</div>
<div>
<h1>$y</h1>
<p>Описание:</p>
$z <br>
Цена: $p $ <br>
Опубликовал:$u
<div>
"
;}
?>
|
так вот когда вывожу, выводятся картинки 3 штуки например , и так же дублируется описание , имя и так далее из таблицы tovar.
так вот как мне вывести так что бы выводились от 1до 3 картинки, и только одно описание имя и т.д из таблицы tovar | |
|
|
|
|
|
|
|
для: Lost_hlq
(07.12.2014 в 17:38)
| |
<?
$id = 0;
while ($row=$bd->fetch_assoc($result_set)) {
if(!$id) {
$id = 1; //или $id=$row['ID'] и $id != !$id $row['ID'] для вывода множества первичных данных
//вывод основной
}
//вывод фото
|
| |
|
|
|
|
|
|
|
для: confirm
(07.12.2014 в 17:45)
| | блин сидел ломал голову с запросом хотел там как то исключить эти записи(
а можете написать на русском что именно делает этот код ? | |
|
|
|
|
|
|
|
для: Lost_hlq
(07.12.2014 в 18:15)
| | Можно и на русском - принцип в следующем:
если есть список значений, каждая строка которого включает повторяющуюся информацию А и различную информацию Б, и необходимо вывести в заголовке информацию А, а под ней информацию Б, то:
1) объявляем вне цикла переменную, которой будем контролировать значение А.
2) в каждую итерацию цикла предваряем проверкой равенства внешней переменной и А - если они не равны, то выводим информацию А, и внешней переменной присваиваем значение А.
Значение Б выводится без проверки.
Если А принадлежит одной персоне, а Б, это набор значений, то значит нужно проверить не первой ли итерацией цикла является текущая его итерация, и если да, то выводим А, а далее Б.
Но так как у цикла while нет явно указанного счетчика итерации, а тревожить MySQL дабы узнать положение указателя не стоит, указываем переменную вне цикла - она равна 0, выводим А, после чего устанавливаем ее в 1, запрещая дальнейший вывод А.
Случай с набором описан выше. Так понятнее? | |
|
|
|
|
|
|
|
для: Lost_hlq
(07.12.2014 в 17:38)
| | >так вот когда вывожу, выводятся картинки 3 штуки например , и так же дублируется описание , имя и так далее из таблицы tovar.
>так вот как мне вывести так что бы выводились от 1до 3 картинки, и только одно описание имя и т.д из таблицы tovar
так может не стоит в один запрос загонять всю логику?
Сделайте простейший запрос на товары, цикл по товаарам , и внутри него простейший запрос фото, и цикл по фотографиям - сразу настанет счастье. | |
|
|
|
|
|
|
|
для: Trianon
(07.12.2014 в 22:48)
| | Кто-то украл аккаунт Trianon'a :)
Мы же вроде как договорились всем форумом, что запрос в цикле это зло и давить его нужно в зародыше, ибо нефиг. | |
|
|
|
|
|
|
|
для: Valick
(08.12.2014 в 12:12)
| | >Кто-то украл аккаунт Trianon'a :)
Найдете - отберите и верните владельцу. :))
>Мы же вроде как договорились всем форумом, что запрос в цикле это зло и давить его нужно в зародыше, ибо нефиг.
В продакшн-варианте логику, конечно, нужно оптимизировать, убирая запрос из цикла, джойня таблицы и т.д., кто бы спорил.
Вот только человека, который пишет в одном операторе echo вывод и описания и картинки, и при эьтом удивляется, что у него описания дублируются под каждую картинку, до продакшена допускать нельзя. И оптимизацией заниматься тоже нельзя. Ему нужно осваивать элементарную логику алгоритма. А для этого требуется убрать сперва все оптимизирующие навороты. Иначе он за деревьями леса не увидит. | |
|
|
|
|
|
|
|
для: Lost_hlq
(06.12.2014 в 20:40)
| | Зачем вообще хранить имена картинок в базе если привязаны они все равно к ID товара и никакой другой информации эта таблица не несет? Не проще ли при сохранении картинок создавать папку с ID товара и туда кидать нужные картинки? | |
|
|
|
|
|
|
|
для: KPETuH
(08.12.2014 в 12:17)
| | достаточно мудрый совет | |
|
|
|