[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Dtw Мускул стал держать хранимые процедуры начиная с версии 5.0... а стабильно и того позже. Думаю дело в этом)
     
  2. Nickotin

    Nickotin Elder - Старейшина

    Joined:
    15 Feb 2007
    Messages:
    84
    Likes Received:
    20
    Reputations:
    5
    Кстати да,солидарен.
     
  3. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Впринципе все легко - одно НО.
    По данной структуре не пойму (хотя особо не думал) вот это:

    7.Вывести предметы, читающиеся хотя бы в двух семестрах.

    Т.е. в таблице м.б. нсколько одноименных предметов с разными идентификаторами? Другого варианта не вижу
     
  4. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Структура таблиц
    Code:
    CREATE TABLE `Lecturers` (
    `id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
    `fio` VARCHAR( 100 ) NOT NULL ,
    `rank` VARCHAR( 40 ) NOT NULL ,
    `post` VARCHAR( 40 ) NOT NULL ,
    PRIMARY KEY ( `id` ) 
    );
    
    CREATE TABLE `disciplines` (
      `id` int(5) unsigned NOT NULL auto_increment,
      `title` varchar(70) NOT NULL,
      `semestr` int(2) NOT NULL,
      `form` enum('exam','setoff','other') NOT NULL,
      PRIMARY KEY  (`id`)
    );
    
    CREATE TABLE `schedule` (
      `id_lector` int(5) UNSIGNED NOT NULL,
      `id_discipline` int(5) UNSIGNED NOT NULL,
      `weekday` enum('Понедельник','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье') NOT NULL,
      PRIMARY KEY  (`id_lector`,`id_discipline`),
      FOREIGN KEY (`id_lector`) REFERENCES `lecturers`(`id`),
      FOREIGN KEY (`id_discipline`) REFERENCES `disciplines`(`id`)
    );
    
    Если что не нравится - можешь поменять :)
    Вот собственно сами запросы:
    Code:
    1) SELECT * FROM `lecturers` WHERE `rank`='Кандидат Наук'
    ----------------------
    2)SELECT DISTINCT `fio`
    FROM `schedule` as `sc`
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
    WHERE `d`.`form`='exam' AND (`id_lector`,`semestr`) <> ALL(
    SELECT `id_lector`,`semestr`
    FROM `schedule` as `sc`
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    WHERE `d`.`form`<>'exam'
    )
    ----------------------
    3) SELECT DISTINCT `fio`
    FROM `schedule` as `sc`
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
    WHERE `d`.`form`='setoff'
    ----------------------
    4) SELECT * FROM lecturers`
    ----------------------
    5) SELECT DISTINCT `l`.`fio`
    FROM `lecturers` as `l` 
    JOIN `schedule` as `sc` on `l`.`id`=`sc`.`id_lector` 
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    WHERE `l`.`id` <> ALL(
    SELECT `l`.`id`
    FROM `lecturers` as `l` 
    JOIN `schedule` as `sc` on `l`.`id`=`sc`.`id_lector` 
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    WHERE `d`.`semestr` NOT IN (3,4))
    ----------------------
    6) SELECT `fio`
    FROM `schedule` as `sc`
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
    WHERE `l`.`rank` = 'Кандидат Наук' AND (`d`.`semestr`=7 OR `d`.`semestr`=8)
    ----------------------
    7) SELECT `title`
    FROM `disciplines`
    GROUP BY `title`
    HAVING count(DISTINCT `semestr`)>1
    ----------------------
    8) SELECT `l`.`fio`
    FROM `schedule` as `sc`
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
    WHERE `l`.`rank`='Доцент'
    GROUP BY `l`.`id`
    HAVING count(DISTINCT `d`.`title`)=3
    ----------------------
    9) SELECT `l`.`fio`
    FROM `schedule` as `sc`
    JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
    JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
    WHERE `l`.`rank`='Доктор Наук' AND `d`.`form`='exam' AND (`d`.`semestr`=9 OR `d`.`semestr`=10)
    
    Сильно не тестил - если что бут не так - то стучись, помогу.
     
    2 people like this.
  5. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Помогите такая проблема
    что при таком запросе он достает многа одинаковых фотах

    в чем может быть ошибка ?

    SELECT jos_vm_product.product_thumb_image FROM jos_vm_product,jos_vm_product_category_xref where category_id

    Мне надо выбрать с Бд таблицы

    jos_vm_product,jos_vm_product_category_xref
    Это таблицы компонент джумлы virtuemart..
    как бы запросом достаю все фото на продукт ток он их че выводи 5 раз одно фото однаково

    PHP:
    $query="SELECT jos_vm_product.product_thumb_image FROM jos_vm_product,jos_vm_product_category_xref where category_id=$id  ";
    return 
    $res2 mysql_query($query);
     
  6. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Запрос

    приложение ......


    [​IMG]
     
  7. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Что бы не
    ,
    а всяко-разно
    обьясни какие именно поля нужно выбирать, и из каких таблиц И ПО КАКОМУ УСЛОВИЮ

    Данный запрос выбирает поле product_thumb_image из таблицы jos_vm_product
    по неизвестно какому условию, возможно правильно "WHERE jos_vm_product.category_id="
    или так

    Какие поля в jos_vm_product_category_xref ?
     
  8. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Поля такие

    category_id product_id product_list
    123 99 NULL


    таблице jos_vm_product .поле product_thumb_image

    нет category_id а есть product_id
     
    #108 DTW, 30 Jun 2008
    Last edited: 30 Jun 2008
  9. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Попробуй так
    Должно работать

    пс И не забывай фильтровать $id, хотя бы так
    $id = (int)$id;
     
    #109 Naydav, 30 Jun 2008
    Last edited: 30 Jun 2008
    1 person likes this.
  10. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Спс огромное все работает
     
  11. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    да не за что :)
    И не забывай фильтровать $id, хотя бы так $id = (int)$id; или прямой вставкой (int)$id
     
  12. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Где ошибка выборе

    Все поля выбирает этот запрос

    а получить че их не могу

    поле получить не могу category_name
    [​IMG]
     
  13. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Попробуй так, если тебе нужно только category_name

    А вообще почитай о функциях
     
    #113 Naydav, 1 Jul 2008
    Last edited: 1 Jul 2008
  14. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Не подходит
    он выводит все категории
    мне надо чтоб поле category_name было выведено по знач category_child_id

    надо получить category_name. category_id

    Таблице jos_vm_category_xref

    category_parent_id category_child_id category_list

    Таблице Таблица : jos_vm_category

    category_id vendor_id category_name category_description --тк дл
     
  15. Корвин

    Корвин Elder - Старейшина

    Joined:
    26 Feb 2007
    Messages:
    256
    Likes Received:
    31
    Reputations:
    3
    пропиши отдельно

    Code:
    
    WHERE jos_vm_category.category_id=jos_vm_cate gory.category_id AND jos_vm_category_xref.category_child_id=jos_vm_cate gory.category_id;
    
    
    
    не "перовое" и "второе" равно "третьему",

    а "первое" равно "третьему" и "второе" равно "третьему"
     
  16. DTW

    DTW Banned

    Joined:
    11 May 2008
    Messages:
    221
    Likes Received:
    52
    Reputations:
    11
    Не помогает все равно выводит парент ид
    мне надо ток чилд иди

    ..................................................................................................
    Таблица : jos_vm_category_xref
    поля category_parent_id category_child_id category_list
    .............................................................................................
    category_id vendor_id category_name
    ............................................................................................

    .

    Это запрос все работает правельно

    при построение структура така

    Как мне добраться Суб меню (category_child_id)?
     
  17. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    [Вопрос: Sql] Копирование части одной таблицы в другую (по выборочным полям)

    Допустим есть 2 таблицы с такими полями
    1: user_id | name
    2: id | user_id | news_id

    Вопрос:

    Можно ли одним запросом вставить данные из первой таблица во второю, что бы tbl1.user_id попал в tbl2. user_id, а tbl2.news_id было постоянным числом, мною заданным ?

    Пример

    tb1:
    tb2: - допустим пустая, после запроса должна выглядеть так:
    где "значение" - число, которое я укажу
    блин вроде все просто... но что-то я втыкаю :)
     
    1 person likes this.
  18. geezer.code

    geezer.code Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    552
    Likes Received:
    358
    Reputations:
    90
    читай мануал по "select into"
     
  19. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    гениальный ответ, так можно и на все вопросы отвечать
     
  20. geezer.code

    geezer.code Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    552
    Likes Received:
    358
    Reputations:
    90
    мля ступил ... тебе надо в уже существующую таблу.
    тогда так.
    insert into tb2( user_id, news_id) values (select user_id, 'значение' from tb1)
    вроде так.
     
Thread Status:
Not open for further replies.