ФорумПрограммированиеPHP для идиотов → Вопрос о PHP / MySQL

Вопрос о PHP / MySQL

  • anton-shirikov

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 15 ноября 2007 г. 21:31

    Привет всем. Я не так давно начал учить PHP. Нужна помощь с MySQL Базой Данных и выводом информации из неё.

    Я не уверен как мне сделать таблицу. То есть у меня сейчас есть поля:

    cat_id
    cat
    make_id
    make
    model_id
    model
    type_id
    type

    Требуется сделать выбор Типа автомобиля, затем марку, модель и тип двигателя. В базе данных у меня есть несколько автомобилей:

    1)
    cat_id - cars
    cat - Легковой Автомобиль
    make_id - alfa
    make - Alfa Romeo
    model_id - 145
    model - 145 (1994-2001)
    type_id - 145
    type - 145 1.3/1.4 (1994-1997)

    2)
    cat_id - cars
    cat - Легковой Автомобиль
    make_id - alfa
    make - Alfa Romeo
    model_id - 146
    model - 146 (1994-2001)
    type_id - 146
    type - 146 1.3/1.4 (1995-1996)


    Проблема заключается в том, что в форме получается, что выводится 2 раза Легковой Автомобиль. Возможно ли используя PHP написать что если такое имя уже было, второй раз не выводить.

    Надеюсь меня хоть кто-нибудь понял


    зарание Спасибо!

    P.S. Прошу прощения за название темы, другово не придумал!
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 15 ноября 2007 г. 23:56, спустя 2 часа 24 минуты 49 секунд

    Не надо пытаться все запихнуть в одну таблицу.
    А вообще, тебе надо сначала почитать теорию проектирования баз данных.
    В поиск по словам: "основы БД", "реляционная модель данных", "нормальная форма", "третья нормальная форма".
  • anton-shirikov

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 16 ноября 2007 г. 2:24, спустя 2 часа 27 минут 57 секунд

    Спасибо :) кажется понял как сделать :D
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2007 г. 9:36, спустя 7 часов 12 минут 15 секунд


    Не надо пытаться все запихнуть в одну таблицу.
    А вообще, тебе надо сначала почитать теорию проектирования баз данных.
    В поиск по словам: "основы БД", "реляционная модель данных", "нормальная форма", "третья нормальная форма".

    Помню объясняли нам эти нормальные формы, и первые, и вторые. итретьи. Ничерта в свое время не понял. Нас тогда аксесу учили. Ипанутей программы я не видел еще ))) Вобщем читать про все это бесполезно, надо на личном опыте все делать.
    Для данного случая я бы сделал такую структуру:
    id (ну с этого должна начинатся любая таблица)
    type (тип авто)
    mark (марка)
    model (модель)
    engine (двигатель)

    Если все это дело надо будет выводить в единичном экземпляре то тогда наверное стоит сперва все занести в масив, потом его пересобрать только с уникальными значениями ну и в конце уже вывести. Либо для БД писать точный запрос или ставить лимит.
    from TRIAL with LOVE
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2007 г. 13:51, спустя 4 часа 14 минут 43 секунды

    TRIAL читать вообще очень полезно :)
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2007 г. 14:13, спустя 21 минуту 31 секунду

    У меня есть свой извращенный ум которому я больше доверяю чем разной писанине :) Хотя не спорю, почитать бывает полезно :)
    from TRIAL with LOVE
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2008 г. 17:34, спустя 144 дня 23 часа 58 минут

    Кстати, я хочу кое-что узнать, но для этого не буду создавать тему.

    У меня есть таблица с юзерами и с id.
    Например на сайте 6 юзеров. Если зарегиться, то id потом будет 7 (так как auto_increment (как пишется не помню))
    Мне нужно сделать так, чтобы если мы напрмер уберём/удалим всю строку с id 3, то все остальные последующие id уменьшаются на 1.

    Как мне это сделать? Не могу в инете найти подходящую функцию для этого случаи.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 9 апреля 2008 г. 17:40, спустя 6 минут 11 секунд

    Во первых, поле id особенно автоинкрементное грязными руками не лапать!!! :)

    Во вторых, если нужен порядковый номер, заводишь специальное поле Ord и после удаления
    UPDATE table SET Ord=Ord-1 WHERE Ord > deleted_ord

    Да, если совсем по хорошему DELETE и UPDATE желательно засунуть в транзакцию.
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 9 апреля 2008 г. 17:46, спустя 5 минут 29 секунд

    А можно дурацкий вопрос - зачем такое делать? :)
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 9 апреля 2008 г. 17:49, спустя 3 минуты 2 секунды


    А можно дурацкий вопрос - зачем такое делать? :)
    Ну например для сортировки.
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2008 г. 18:22, спустя 33 минуты 24 секунды

    Ну например для сортировки.

    По-моему, сортировку проще делать средствами PHP.

    Например на сайте 6 юзеров. Если зарегиться, то id потом будет 7 (так как auto_increment (как пишется не помню))
    Мне нужно сделать так, чтобы если мы напрмер уберём/удалим всю строку с id 3, то все остальные последующие id уменьшаются на 1.

    Нельзя, нельзя, и еще раз нельзя так делать.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 9 апреля 2008 г. 19:14, спустя 51 минуту 24 секунды


    По-моему, сортировку проще делать средствами PHP.
    Чего, чего?
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2008 г. 20:16, спустя 1 час 2 минуты 14 секунд

    А как можно вывести число сколько запросов к дб было на данной странице? И сколько времени затратило генерация страницы?
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2008 г. 21:32, спустя 1 час 15 минут 30 секунд

    проще простого..
    будем считать, что ты юзаешь mysql_query() напрямую (без всяких классов-оболочек)
    для подсчета кол-ва запросов придется написать функцию типа

    function db_query($sql) {
    global $_profiling_data;
    $begin = microtime(1);
    $resource = mysql_query($sql);
    $total = microtime(1) - $begin;
    $_profiling_data[] = $total;
    return $resource;
    }

    и по всему коду просто заменить mysql_query на db_query
    в самом конце скрипта var_dump($_profiling_data); - увидишь сколько элементов (столько было и запросов) и время на каждый запрос

Пожалуйста, авторизуйтесь, чтобы написать комментарий!