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

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

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

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Мне нужно получить всех!!! юзеров, к каждому из которых добавляеться дополнительное поле 1 или 0(или пусто), которое береться в зависимости от наличия записи в другой таблице
     
  2. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Naydav, используй в качестве последнего поля конструкцию if

    т.е. Select ...., IF(условие,1,0)

    Примерно так (правильность не гарантирую, писал прям сюда, не проверял т.к. нет данных :) но принцип такой)

    SELECT *, if(`u`.`id`=`ua`.`userid` AND `ua`.`someid`=38,1,0)
    FROM `user` as `u` LEFT JOIN `user_addithion` as `ua` ON `u`.`id`=`ua`.`userid`
     
    1 person likes this.
  3. Chode

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

    Joined:
    20 Jul 2008
    Messages:
    164
    Likes Received:
    19
    Reputations:
    0
    MySQL ERROR : 1 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation 'like'

    ставил ставил, на mySQL 4-5 c разными кодировками, все равно не работает, хотя устаналивается нормально...
     
    #283 Chode, 22 Sep 2008
    Last edited: 22 Sep 2008
  4. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Дело в том, что ты пытаешся сравнить строки с разной коллацией... приводи все к одной и сравнивай (либо базу к cp1251, либо строку к латин_шведиш)
     
  5. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    http://en.wikipedia.org/wiki/Full_text_search
    http://ru.wikipedia.org/wiki/Полнотекстовый_поиск
    А оттуда уже пляши
     
  6. UnPazz

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

    Joined:
    30 Aug 2008
    Messages:
    95
    Likes Received:
    43
    Reputations:
    6
    скрипт форума smf 2.0 работает на PostgreSQL /MySQL.
    Если сначала он будет работать на MySQL, то можно ли будет потом "преобразовать" данные из MySQL в PostgreSQL ?
     
  7. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Вроде можно. Скрипт называется neomy2pg. Вот здесь есть некоторая информация о нем:
    _http://web.opennet.ru/opennews/art.shtml?num=6917
     
    1 person likes this.
  8. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Мне кажется, можно только как-то так:
    Code:
    SELECT * FROM table1, table2, table3, tableN WHERE something=code
    
    Тоесть осуществлять поиск по всем таблицам базы, задав условие, которое будет равняться этому самому коду.
     
    1 person likes this.
  9. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
     
    1 person likes this.
  10. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    PHP:
    <?php

    $source 
    "/home/shaggy/shaggy.sql";
    $output "/home/shaggy/pgtest.sql";

    $enum 'varchar(10)'// convert enum to this

    if ( !file_exists($source) ) {
     die(
    "File not found: $sourcen");
    }

    $fd fopen($source"r");
    $result fread($fdfilesize($source));
    fclose($fd);

    $result mysql2postgre($result);

    $fd fopen($output"w");
    if (
    fwrite($fd$result)) {
     echo 
    "OKn";
    } else {
     echo 
    "Failedn";
    }
    fclose($fd);




    function 
    mysql2postgre($source) {
     global 
    $enum;

     
    $result $source;
     
    $result preg_replace('/Type=MyISAM/i'''$result);

     
    // convert line comments
     
    $result preg_replace("/#(.*)/"'--$1'$result);
     
    // and compress newlines
     
    $result preg_replace("/n{2,}/""nn"$result);

     
    // get rid of proprietary code
     
    $result preg_replace("/DROP TABLE IF EXISTSW+.+/i"''$result);

     
    // indices
     
    $result preg_replace("/(.*)UNIQUE KEY.+((.+))/i",
     
    "$1UNIQUE ($2)"$result);

     
    // a little hack to save primary keys
     
    $result preg_replace("/(.*)PRIMARY KEY.+((.+))/i",
     
    "$1PRIMARY ($2)"$result);
     
    $result preg_replace("/,n.*KEYW.+((.+))/i",
     
    "n-- was KEY ($1)"$result);
     
    $result preg_replace("/(.*)PRIMARY.+((.+))/i",
     
    "$1PRIMARY KEY (\2)"$result);

     
    $result preg_replace("/(.*?)(w+).+auto_increment/i",
     
    '$1$2 SERIAL'$result);

     
    // Postgre doesn't support the binary modifier
     
    $result preg_replace('/binary/i'''$result);

     
    // type transformations
     
    $result preg_replace('/enum(.+)/i'$enum$result);

     
    $result preg_replace('/tinyint(.+)/i''smallint'$result);
     
    $result preg_replace('/smallint(.+)/i''smallint'$result);
     
    $result preg_replace('/meduimint(.+)/i''int'$result);
     
    $result preg_replace('/int(.+)/i''int'$result);

     
    // Most of my default dates are '0000-00-00'
     
    $result preg_replace("/datetime(.*) default '.*'/i",
     
    'datetime$1'$result);
     
    $result preg_replace("/date(.*) default '.*'/i",
     
    'date$1'$result);


     return 
    $result;
    }

    ?>
     
    2 people like this.
  11. masbear

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

    Joined:
    4 Aug 2008
    Messages:
    81
    Likes Received:
    7
    Reputations:
    1
    На халявных хостингах даются халявные мускул сервера. Там лимит в 10 мб и в 1-100 подключений... =(
    Я как раз такой сервер и юзаю, но не с того же хостинга, а с другого (на asp net). И меня интересует: есть ли в нете просто mysql сервера без хостинга?
     
  12. HawkDoom

    HawkDoom New Member

    Joined:
    3 Aug 2008
    Messages:
    23
    Likes Received:
    0
    Reputations:
    0
    Подскажите веб клиент MySQL, токо не phpMyAdmin
    какие кто юзает?
     
  13. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Попробуй SQLyog Enterprise, только это не веб клиент.
     
  14. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    ИМХО из веб самый цивилный - это пыхмайадмин. Если не веб - у них есть свой инструмент для такого дела.... MySQL GUI Tools обзывается:
    http://dev.mysql.com/downloads/gui-tools/5.0.html
     
  15. DarkMist

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

    Joined:
    20 Feb 2007
    Messages:
    201
    Likes Received:
    24
    Reputations:
    0
    переустановка Mysql-server in Ubuntu

    Выручайте Ачатовцы!! при переустановки mysql-server-5.0 на убунте выдает ошибку :
    Удаляется пакет mysql-server-5.0... * Stopping MySQL database server mysqld
    Warning: World-writable config file '/etc/mysql/my.cnf' is ignore
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    d

    удаляю ВСЁ!!! через aptitude или через apt-get, потом удаляю все катологи и файлы связаные с мускулом ....
    при повторной установки сервера системе НЕ создает каталогов ни файлов а выдает туже ошибку (((
    установил мускул на виртуалку скопировал файлы которые смог : и my.cnf и все что дало скопировать, а =mysqld.sock недает!!
    перкопал убунтовский форум ничего толкового неговорят((
    Подскажите как подчистую удалить мускул ???
    ...идут вторые сутки гемороя((((( :eek:
     
  16. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    sudo apt-get purge mysql-5
     
  17. DarkMist

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

    Joined:
    20 Feb 2007
    Messages:
    201
    Likes Received:
    24
    Reputations:
    0
    сделал потом установил : sudo apt-get install -f mysql-server-5.0
    и все равно:
    Code:
    Распаковывается пакет mysql-server-5.0 (из файла .../mysql-server-5.0_5.0.51a-3ubuntu5.1_i386.deb)...
    Настраивается пакет mysql-server-5.0 (5.0.51a-3ubuntu5.1) ...
     * Stopping MySQL database server mysqld                                                  [ OK ] 
    /var/lib/dpkg/info/mysql-server-5.0.postinst: line 143: /etc/mysql/conf.d/old_passwords.cnf: No such file or directory
    dpkg: не удалось обработать параметр mysql-server-5.0 (--configure):
     подпроцесс post-installation script возвратил код ошибки 1
    При обработке следующих пакетов произошли ошибки:
     mysql-server-5.0
    E: Sub-process /usr/bin/dpkg returned an error code (1)
    нашел файл /conf.d/old_passwords.cnf скопировал в папку , выполник повторный инсталл
    Code:
    не установлено до конца или удалено 1 пакетов.
    After this operation, 0B of additional disk space will be used.
    Настраивается пакет mysql-server-5.0 (5.0.51a-3ubuntu5.1) ...
     * Stopping MySQL database server mysqld                                                  [ OK ] 
    080622  4:44:39 [ERROR] /usr/sbin/mysqld: Can't find file: './mysql/user.frm' (errno: 13)
    080622  4:44:39 [ERROR] /usr/sbin/mysqld: Can't find file: './mysql/user.frm' (errno: 13)
    ERROR: 1017  Can't find file: './mysql/user.frm' (errno: 13)
    080622  4:44:39 [ERROR] Aborting
    
    080622  4:44:39 [Note] /usr/sbin/mysqld: Shutdown complete
    
    Reloading AppArmor profiles : done.
     * /etc/init.d/mysql: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz
     * Starting MySQL database server mysqld                                                  [fail] 
    invoke-rc.d: initscript mysql, action "start" failed.
    dpkg: не удалось обработать параметр mysql-server-5.0 (--configure):
     подпроцесс post-installation script возвратил код ошибки 1
    При обработке следующих пакетов произошли ошибки:
     mysql-server-5.0
    E: Sub-process /usr/bin/dpkg returned an error code (1
    )
    хотя этот mysql/user.frm на месте...
     
  18. Naydav

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Склейка таблиц:

    Всем, Добрый вечер!
    Нужно получить результат на основе выбора из 3 таблиц
    Есть таблицы:
    course
    id title

    course_date
    id courseID date

    course_user
    id courseID userID

    Связи вполне очевидны, в course_user содержиться соответствия между курсами и пользователями, а в course_date между курсами, и датами их проведения
    Так вот нужно получить, список всех дат из таблицы course_date, у которых множество courseID береться
    из

    Code:
    SELECT id
    FROM course
    WHERE courseID
    IN (
      SELECT `courseID`
      FROM cclass_user_course
      WHERE `userID` = 1
    )
    Т.е. нужно получить даты проведения курсов( из одной таблицы), список этих курсов берем на основе выборки (из таблицы course_user), + к выбранным курсам беруться еще ихни title(из таблицы course)

    Вообщем, что-то типа

    Code:
    SELECT date
    FROM course_date
    WHERE courseID
    IN (
    
      SELECT id
      FROM course
      WHERE courseID
      IN (
    
        SELECT courseID
        FROM user_course
        WHERE `userID` =1
      )
    )
    Только к результату еще нужно добавить title курса, ну и желательно наверной join, а не подвыборки
     
  19. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    ну что-то типа этого
    Code:
    select d.date, c.title 
    from course_date d 
    left join course c on d.courseID = c.id 
    left join course_user u on c.id = u.courseID 
    where userID = 1;
    
     
  20. Naydav

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Вот так работает
    Code:
    SELECT d.date, c.title
    FROM cclass_course_date AS d
    LEFT JOIN cclass_course AS c ON d.courseID = c.id
    LEFT JOIN cclass_user_course AS u ON c.id = u.courseID
    WHERE u.userID =1
    AND u.type =1
    AND d.date > NOW()
    GROUP c.title
    
    Спасибо

    Но так мы получаем последнюю дату(для курса) в списке, а как можно получить первую(т.е. ближайшую)?
    Может можно "усовершенствовать" запрос?
     
    #300 Naydav, 29 Oct 2008
    Last edited: 29 Oct 2008
Thread Status:
Not open for further replies.