За последние 24 часа нас посетили 22878 программистов и 1260 роботов. Сейчас ищут 742 программиста ...

Как проектировать БД для инет-магазина

Тема в разделе "MySQL", создана пользователем Koc, 12 сен 2008.

  1. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    =)

    Поиск:

    Свойство: //// Значение:
    Зпх //// Хорош OR Хр OR рш

    OR, AND

    / Добавить свойство /
     
  2. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    Конечно будет инструкция по поиску =)
     
  3. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    если введено только значение, то будем искать во всех свойствах =)
     
  4. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    а кстати больше, меньше у меня будет только для цены =), и цена хранится отдельно
    ибо на моей платформе планируется гипермаркет и там будут торгавать всевозможными товарами
     
  5. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Denis
    А MySQL эту инструкцию по поиску поймет? ;)
    А сравнивать однотипные товары как?
     
  6. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    какую "эту инструкцию", покажи "эту инструкцию" )), если эту [property:[Вес]]100кг[/property], то конечно надо через PHP
     
  7. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Denis
    Т.е. выбирать все товары из "гипермаркета", и каждый средствами PHP парсить и проверять?
    Низачот. У тебя сервер опухнет.
     
  8. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    На момент сравнивания ты будешь знать с каким товаром ты будешь сравнивать, то есть надо будет найти товар с такими же именами свойств
     
  9. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    будем как-то выходить из ситуации, и почему именно сервер, а не сервера?
     
  10. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Denis
    А, ну если у вас так принято исправлять ошибки проектирования... ;)
    Точно, даешь гипермаркет на 1000 товаров и 10 серверов. Каждому по 100 товаров, а то устанет ;)
     
  11. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    а почему это ошибка проектирования? только потому что тебе не понравилось =))) и всё. Ты же понимаешь что всё относительно
     
  12. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Denis
    Потому, что базы данных были созданы не только для хранения данных, но и для их поиска. Быстрого и экономного поиска. У тебя же поиск осуществляется исключительно средствами PHP, а перед этим нужна полная выборка всей таблицы, что не каждый сервер потянет. И как ты уже сам заметил, твой алгоритм способен только искать по точным значениям, а на практике чаще требуется поиск по диапазону, например, "объем чего-то там - от 2 до 5 л".
     
  13. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    Ок уговорил ))) будем юзать регулярки MySQL'a
     
  14. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    "объем чего-то там - от 2 до 5 л" - что тебе мешает реализовать на основе данной структуры?
     
  15. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Denis
    Мне что мешает? Наверное, только одно - у меня такой структуры нет ;)
     
  16. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    давай свою структуру =)
     
  17. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Denis
    http://php.ru/forum/viewtopic.php?p=125276#125276
    Для вышеприведенных примеров запросы будут выглядеть примерно так:
    [sql]SELECT * FROM shop WHERE size<=100 AND smell=1
    SELECT * FROM shop WHERE volume>=2 AND volume<=5[/sql]
     
  18. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    [sql]SELECT _поля_какие_нужны_
    FROM
    (
    SELECT prop.itemID, prop.ord
    FROM
    (SELECT v.itemID, (@i:=if(@i is null,@i:=0, 1)+@i) AS ord,
    COUNT(DISTINCT v.fieldID) AS cnt
    FROM values AS v
    JOIN items AS i ON v.itemID=i.itemID
    WHERE ((v.fieldID=1 AND v.value=5) OR (v.fieldID=2 AND v.value=10)) AND
    i.date_add > '2008-01-01'
    GROUP BY v.itemID
    HAVING cnt=2
    ) AS prop
    JOIN values AS v2 ON prop.itemID=v2.itemID
    WHERE v2.fieldID=3
    ORDER BY v2.value DESC
    LIMIT 10
    ) AS t
    JOIN items ON items.itemID=t.itemID
    JOIN values ON ...
    LEFT JOIN fields ON ...
    [/sql]
    Даже спецом нашёл, какие "красивые" запросы получаются

    http://phpclub.ru/talk/showthread.php?s ... hlight=EAV
     
  19. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    та ну на такое решение мне надо платформу создать, а не затычку ))
     
  20. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Раз уж тут слинковали похапэклаб, позволю себе процитировать одну фразу оттуда, ибо все равно пригодится:

    И ссылочка на оригинал: http://www.sql.ru/articles/mssql/2006/0 ... uage.shtml

    P.S. Кстати, к этому
    +100500 :)
     
  21. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    И снова я.

    Есть разделы/подразделы/.../подразделы

    Как их выводить? Пока вижу 2 варианта:

    1) у нас есть просто что-то типа ?m=category&id=1 - модуль категорий, идентификатор категории. Я могу задать свой выборочный шаблон на эту категорию, и у категории с id=2 вывод товаров будет не такой, как у категории с id=4. Например таблицы будут по-другому выглядеть. Ну и ессно page title, meta description, mete keywords будут свои для каждой категории.

    А что, если я хочу, что бы в категории с id=2 сверху, перед списком товаров выводился какой-то текст, а под этим списком я хочу добавить фотку своего кота? Да, можно создать выборочный шаблон, в котором ввести текст. Но наверно это не лучшее решение, особенно если сайт многоязычный.
    На выручку приходит второй вариант.

    2) У нас есть что-то типа cms-ки. Мы создаем в ней структуру сайта:
    Код (Text):
    1. root
    2. |-о нас
    3. |-гарантии
    4. |-каталог товаров
    5. --|-Холодильники
    6. ----|-с 2 дверями
    7. ----|-с 4 ушами (*)
    8. --|-фритюрницы
    9. --|-Микроволновки
    10. ----|-гриль
    11. ----|-соло
    12. ----|-конвенкция
    13. --|-Бутербродницы
    Теперь я могу не только назначить выборочный шаблон/meta-теги/page title, но и полностью настроить вид страницы.


    Особое внимание стоит уделить следующему моменту:
    Посмотрим на категорию, отмеченную звездочкой - (*). Предположим, что мы хотим получить следующий вид страницы:

    Код (Text):
    1.  
    2. блок-авторизация|    какой-то текст   |что-то еще
    3.                 |вывод этой категории|
    4.                 |  фотка   моего кота  |
    Как нам сделать так, что бы выводились товары именно этой категории и именно в этом месте страницы?
    Можно сделать что-то типа
    HTML:
    1. <div id="aa">
    2.     <TPL_OBJECT:CAT>
    3.         <TPL_SETTINGS:id('5')>
    4.         <TPL_SETTINGS:viewType('какой-то параметр')>
    5.     </TPL_OBJECT:CAT>
    6. </div>
    7.  
    вышеуказанный кусок - это то, что хранится в базе для страницы под (*). TPL_OBJECT:CAT - вызывает объект категории, TPL_SETTINGS:id('5') - выводить только категорию с Id=5.

    Получается, что это те же самые шаблоны, только теперь они хранятся не на диске а в базе. И у нас будет некоторая избыточность: есть категория, у которой свои настройки мета-тегов, а есть страница, у которой они совсем другие. Мы создаем категорию, и попутно должны создать страницу на сайте - то есть по сути одно и то же делаем 2 раза. Оправдано ли это?

    Какой вариант выбрать: 1 или 2? Вообще нормально е ли явление, когда я из шаблоны вызываю какой-то объект, передаю ему какие-либо параметры? Имхо это очень удобно.
     
  22. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Ребята, помогайте!
    Если сейчас что-то не так сделаю, потом заманаюсь переписывать
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    буу много текста, я бы использовал плагины + эксклюзивные шаблоны(для каждой категории, если надо)
     
  24. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1