Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 28.05.2015, 12:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kostyanet
В общем по проектированию баз данных надо ходить на спец-форумы. Программисты в этом ничерта не понимают. Хуже всего что понимают, но по-своему, через одно место.
Я вижу ты дохрена понимаешь Хоть бы не пукал, а молча сидел в сторонке, знахарь мать ети.... Пустшыка хреновая, ну-ка под лавку и не гавкать.
Ответить с цитированием
  #42 (permalink)  
Старый 28.05.2015, 13:41
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

"Разошелся так и сыпеть, будь он параллелепипедь, будь он круг, ядрена вошь."
Ответить с цитированием
  #43 (permalink)  
Старый 28.05.2015, 13:49
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

Сообщение от laimas Посмотреть сообщение
Он не удобен тем, что при подсчетах нужно будет пробегать по всем строкам в блокноте, чтобы найти одни и те же туфли, ...

Легенда гласит - труд сделал из обезьяны человека, и когда он понял, ...

например, сколько литров наваристого борща получится из косточки ...

А вот если бы наш мир появился не согласно легенде, а в результате..

Есть такой лозунг - "Мы не рабы, рабы не мы!".

А тут блокнот и карандаш тоже могут помочь. ...

...да и не всегда охота писать много.
Гомер нервно курит...
Ответить с цитированием
  #44 (permalink)  
Старый 28.05.2015, 13:58
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Потому что невежда. Все что вы пытались объяснить нубу, называется - метафора.

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

Папка в винде - это метафора папки в шкафу. В папке хранятся файлы - это метафора файлов - таких картонных карточек с записями например о персоналиях или товарах, или пациентах и тп.

Товар на веб-странице интернет-магазина - метафора настоящего товара.

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

И вот когда у вас есть такой магазин, или вы хорошо, или вообще знаете как он работает, как обычно такие магазины работают, то не потребуется больших умственных затрат чтобы спроектировать БД под метафору такого магазина.

А вот если не знаете - то ничего и не получится. Потому что нет прототипа. Не с чего метафорировать так сказать.

Достаточно разок увидеть счет-фактуру того самого магазина чтобы понять как оно в общем и целом устроено. Возникает вопрос - откуда у ТС вообще идея тренироваться на продаже обуви, если он не бельмеса в этом деле?

Последний раз редактировалось kostyanet, 28.05.2015 в 14:01.
Ответить с цитированием
  #45 (permalink)  
Старый 28.05.2015, 14:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kostyanet
Гомер нервно курит...
Кури, кури, говнюк
Ответить с цитированием
  #46 (permalink)  
Старый 28.05.2015, 18:40
Аспирант
Отправить личное сообщение для arhat78 Посмотреть профиль Найти все сообщения от arhat78
 
Регистрация: 06.04.2015
Сообщений: 52

С таким кодом:
function get_product($id)
  {
    global $link;
    $query = ("select products.*,sizes.size 
from products
left joint sizes on sizes.id = products.size_id ");
    
    $result = mysqli_query($link, $query);
    if ($result)
    {
    $row = mysqli_fetch_array($result);
    
    return $row;
    } 
  }


выходит эта ошибка:

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Erreur de syntaxe prГЁs de 'joint sizes on sizes.id = products.size_id' Г  la ligne 3' in C:\wamp\www\Shop\db_fns.php on line 143


И как выводить нужные размеры в списке через products.size_id? Ведь у каждого ботинка может быть определённые размеры, а в этой колонке можно поставить только одну цифру...
Ответить с цитированием
  #47 (permalink)  
Старый 28.05.2015, 19:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от arhat78
И как выводить нужные размеры в списке
То есть имеется ввиду вывод списка для покупателя, в котором он будет осуществлять выбор этих самых размеров?

Сообщение от arhat78
Ведь у каждого ботинка может быть определённые размеры, а в этой колонке можно поставить только одну цифру...
Какую цифру, количества или чего?
Ответить с цитированием
  #48 (permalink)  
Старый 29.05.2015, 08:48
Аспирант
Отправить личное сообщение для arhat78 Посмотреть профиль Найти все сообщения от arhat78
 
Регистрация: 06.04.2015
Сообщений: 52

Так у меня выводится карточка товара с описанием:

<table align="center" style="border-width: 1; border-style: dashed" class="product" width="200" height="200">
            <tr>
                <td valign="top"   align="center" cellpadding="5" cellspacing="5">
                    <div><a href="#"><img src="userfiles/<?=$product['image']?>" width="150" height="100"     alt="" /></a></div>
                    <div class="description">
                        <div class="product-name"><a href="#"><?=$product['title']?></a></div>
                        <div class="product-price">Цена: <?=$product['price']?> руб</div>
                    
                    
                    </div>
                </td>
                
                <td valign="top">
                    <div><?=$product['description']?></a></div>              
              
                   <form action="index.php" method="get">
                   <fieldset> Размер:
<input type="hidden" name="view" value="add_to_cart">
<input type="hidden" name="id" value="<?=$product['id']?>">
<select name="size">

<?php
$result = $link->query("SELECT size FROM sizes WHERE `sizes`.`id_boot`='$id' ");

while ($b = mysqli_fetch_assoc($result))
{
      echo  "<option   value='".$b['size']."'>"   .$b['size'].  " </option>";
}
?>
</select></fieldset>
<input type=image src="userfiles/8.jpg" width="60" height="60" value="Добавить в корзину">
</form> 
                     </td>
            </tr>
    </table>


Такой кейс:
case ('product'):
       $id = $_GET['id'];
       $product = get_product($id);   
    break;


И функция выборки товара:
function get_product($id)
  {
    global $link;
    $query = ("SELECT * FROM products   WHERE id='$id'   ");
    
    $result = mysqli_query($link, $query);
    if ($result)
    {
    $row = mysqli_fetch_array($result);
    
    return $row;
    } 
  }

Если в этой функции делаю тот код с left join, то и появляются та ошибка, которую привёл.

А по поводу БД и таблиц. У меня есть таблица products с описанием товаров, и есть таблица sizes, где через size_id идёт ассоциация с id продукта. В ней получается:
id   size_id   size
1      1         19
2      1         20
3      1         21
4      2         19
5      2         20
6      2         21
7      2         22
, где size_id это id ботинка. И в карточке товара выпадающим списком выводится у ботинка id=1 размеры 19-20, у ботинка id=2 размеры 19-22. Я додумался только до такого вывода размеров......
Ответить с цитированием
  #49 (permalink)  
Старый 29.05.2015, 15:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

У вас что "французский" SQL?

Ошибка потому, что объединение запроса не потому полю. ID размера это уникальный для размера ключ.

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

Чтобы связать продукты с размерами, которые у них есть, нужна внешняя таблица связей между этими таблицами.

Пусть таблица продуктов, условно products
pid name    etc
1   name 1  aaaaaa
2   name 2  bbbbbb

Таблица размеров, условно proportions
id   size
1    19
2    20
3    21
4    22

А вот так они связываются через внешнюю таблицу, условно назовем ее relations:
pid  id
1     1
1     2
1     4
2     1
2     3

И у этой таблицы pid + id, это составной уникальный ключ, который не позволит одному и тому же продукту указать два и более раза один и тот же размер. Из этой таблицы видно, что продукт 1 имеет размеры 19, 20 и 22, а продукт 2 размеры 19 и 21. Если ведется учет количества размеров на складе, то эта таблица может содержать и поле описывающее это количество для каждого из размеров у каждого из продуктов.

Чтобы получить товары и их размеры, запрос к таблице продуктов обращается к этой таблице соединяя их как

ON relations.pid = products.pid

А по полученному таким образом id размера из этой таблицы, объединяем в запрос и таблицу размеров как

ON relations.id = proportions.pid

Получаем такой запрос:
$q = mysql_query('SELECT * 
                  FROM products
                  LEFT JOIN relations
                  USING(pid)
                  LEFT JOIN proportions
                  USING(id)
                  ORDER BY name, size');


Так как имена полей в таблицах по которым они связываются одни и те же что в родительских, что в таблице связей, то используется USING(). Результатом будет ресурс:
Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 1
            [name] => name 1
            [etc] => aaaaaa
            [size] => 19
        )

    [1] => Array
        (
            [id] => 2
            [pid] => 1
            [name] => name 1
            [etc] => aaaaaa
            [size] => 20
        )

    [2] => Array
        (
            [id] => 4
            [pid] => 1
            [name] => name 1
            [etc] => aaaaaa
            [size] => 22
        )

    [3] => Array
        (
            [id] => 1
            [pid] => 2
            [name] => name 2
            [etc] => bbbbbb
            [size] => 19
        )

    [4] => Array
        (
            [id] => 3
            [pid] => 2
            [name] => name 2
            [etc] => bbbbbb
            [size] => 21
        )

)

в котором проходом в цикле по ключу pid получаем описание товара и список его размеров.

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

Последний раз редактировалось laimas, 29.05.2015 в 15:07.
Ответить с цитированием
  #50 (permalink)  
Старый 29.05.2015, 21:25
Аспирант
Отправить личное сообщение для arhat78 Посмотреть профиль Найти все сообщения от arhat78
 
Регистрация: 06.04.2015
Сообщений: 52

Благодарю, переделал в БД таблицы, только вместо таблицы proportions оставил sizes. И списком размеры не выдаёт, пишет ошибки:

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Champ: 'id' dans from clause est ambigu' in C:\wamp\www\Shop\views\pages\product.php on line 39
( ! ) mysqli_sql_exception: Champ: 'id' dans from clause est ambigu in C:\wamp\www\Shop\views\pages\product.php on line 39


Line 39 это -
ORDER BY title, size


<select name="size">

<?php
$result = $link->query('SELECT *
                  FROM products
                  LEFT JOIN relations
                  USING(pid)
                  LEFT JOIN sizes
                  USING(id)
                  ORDER BY title, size');

while ($b = mysqli_fetch_assoc($result))
{
      echo  "<option   value='".$b['size']."'>"   .$b['size'].  " </option>";
}
?>
</select>


sizes вместо proportions
title вместо name

Да, по кодировке: пытаюсь выставить utf8_general_ci, но автоматически всё равно выставляется utf8mb4_general_ci..... Глюк какой-то......
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить, что есть поле селект у товара borus Общие вопросы Javascript 12 23.04.2014 22:14
Вывод выбранных данных и проверка checkbox MasterHrust Javascript под браузер 3 28.09.2011 17:44
вывод jquery cookie как вывести данные из куки klubnichkaaa AJAX и COMET 2 12.08.2011 13:45
Вывод переменных MasterHrust Javascript под браузер 4 03.08.2011 15:41
Вывод данных в Друпал 6 из MySQL, небольшая работа torquemada Работа 1 22.05.2011 17:05