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

Форум MySQL

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

 

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

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

тема: Сформировать Запрос
 
 автор: Lost_hlq   (06.12.2014 в 20:40)   письмо автору
 
 

Помогите сформировать запрос есть две таблицы : 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

  Ответить  
 
 автор: Trianon   (07.12.2014 в 00:44)   письмо автору
 
   для: Lost_hlq   (06.12.2014 в 20:40)
 

Имеет смысл привести полную структуру таблиц, и кроме того по несколько строк из каждой.
Из оисания неясно, что является первичным ключом в каждой из таблиц.
Если и в той, и в другой таблице первичный ключ - ID , то в предложении USING его тоже стоит написать заглавными буквами.

  Ответить  
 
 автор: Lost_hlq   (07.12.2014 в 13:10)   письмо автору
 
   для: 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 , и вот как избавится от этого дублирования

  Ответить  
 
 автор: Trianon   (07.12.2014 в 13:24)   письмо автору
 
   для: Lost_hlq   (07.12.2014 в 13:10)
 

приведите пожалуйста структуру!
структуру можно посмотреть с помощью запроса

SHOW CREATE TABLE `ИмяТаблицы`;

Что является первичным ключом второй из таблиц?

Фраза "таблицы связываются по ID" - пустой звук.
Ни таблицы сами по себе (ни картинки из них) никуда не связываются, пока запрос на сервер не послан.
Запрос написать вы не можете, иначе бы сюда не писали. Так что забудьте о том, что они как-то связываются, пока не определитесь с ключами.
и наконец.
На примере строк таблиц, которые вы привели, какой отклик дает ваш запрос?
А какой отклик вы ожидаете, то есть который бы вас устроил?

  Ответить  
 
 автор: Lost_hlq   (07.12.2014 в 17:38)   письмо автору
 
   для: 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

  Ответить  
 
 автор: confirm   (07.12.2014 в 17:45)   письмо автору
 
   для: 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'] для вывода множества первичных данных
        //вывод основной
   
}
   
//вывод фото 

  Ответить  
 
 автор: Lost_hlq   (07.12.2014 в 18:15)   письмо автору
 
   для: confirm   (07.12.2014 в 17:45)
 

блин сидел ломал голову с запросом хотел там как то исключить эти записи(
а можете написать на русском что именно делает этот код ?

  Ответить  
 
 автор: confirm   (07.12.2014 в 18:43)   письмо автору
 
   для: Lost_hlq   (07.12.2014 в 18:15)
 

Можно и на русском - принцип в следующем:

если есть список значений, каждая строка которого включает повторяющуюся информацию А и различную информацию Б, и необходимо вывести в заголовке информацию А, а под ней информацию Б, то:

1) объявляем вне цикла переменную, которой будем контролировать значение А.
2) в каждую итерацию цикла предваряем проверкой равенства внешней переменной и А - если они не равны, то выводим информацию А, и внешней переменной присваиваем значение А.

Значение Б выводится без проверки.

Если А принадлежит одной персоне, а Б, это набор значений, то значит нужно проверить не первой ли итерацией цикла является текущая его итерация, и если да, то выводим А, а далее Б.
Но так как у цикла while нет явно указанного счетчика итерации, а тревожить MySQL дабы узнать положение указателя не стоит, указываем переменную вне цикла - она равна 0, выводим А, после чего устанавливаем ее в 1, запрещая дальнейший вывод А.

Случай с набором описан выше. Так понятнее?

  Ответить  
 
 автор: Trianon   (07.12.2014 в 22:48)   письмо автору
 
   для: Lost_hlq   (07.12.2014 в 17:38)
 

>так вот когда вывожу, выводятся картинки 3 штуки например , и так же дублируется описание , имя и так далее из таблицы tovar.
>так вот как мне вывести так что бы выводились от 1до 3 картинки, и только одно описание имя и т.д из таблицы tovar

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

  Ответить  
 
 автор: Valick   (08.12.2014 в 12:12)   письмо автору
 
   для: Trianon   (07.12.2014 в 22:48)
 

Кто-то украл аккаунт Trianon'a :)
Мы же вроде как договорились всем форумом, что запрос в цикле это зло и давить его нужно в зародыше, ибо нефиг.

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

>Кто-то украл аккаунт Trianon'a :)
Найдете - отберите и верните владельцу. :))

>Мы же вроде как договорились всем форумом, что запрос в цикле это зло и давить его нужно в зародыше, ибо нефиг.

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

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

  Ответить  
 
 автор: KPETuH   (08.12.2014 в 12:17)   письмо автору
 
   для: Lost_hlq   (06.12.2014 в 20:40)
 

Зачем вообще хранить имена картинок в базе если привязаны они все равно к ID товара и никакой другой информации эта таблица не несет? Не проще ли при сохранении картинок создавать папку с ID товара и туда кидать нужные картинки?

  Ответить  
 
 автор: Valick   (08.12.2014 в 12:19)   письмо автору
 
   для: KPETuH   (08.12.2014 в 12:17)
 

достаточно мудрый совет

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

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