[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
    Code:
    ORDER BY `nal` DESC,`name`
     
    1 person likes this.
  2. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Почему то не работает, всё по имени по алфовиту, но идут "есть в наличии" и "нет в наличии" в перемешку :confused: :confused: :confused: :confused: :confused: :confused: :confused: :confused:
     
  3. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Странно... Я хоть и приболел, но мой больной разум выдал вроде бы правильную конструкцию (ибо она элементарна)... Дай дамп таблицы (если возможно) что бы можно было посмотреть что и как.
     
    1 person likes this.
  4. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Спасибо VDShark, всегда выручаешь! Вот дамп:
    Code:
    CREATE TABLE `products` (
      `prodid` int(10) NOT NULL DEFAULT '0',
      `podcatid` varchar(255) NOT NULL DEFAULT '0',
      `name` varchar(255) NOT NULL DEFAULT '',
      `price` float(11,2) NOT NULL DEFAULT '0.00',
      `opis` text NOT NULL,
      `catid` int(10) NOT NULL DEFAULT '0',
      `podpodcatid` int(11) DEFAULT NULL,
      `podpodpodcatid` int(11) DEFAULT NULL,
      `price2` float(11,2) DEFAULT NULL,
      `nal` varchar(255) DEFAULT NULL,
      `opis1` text,
      `art` varchar(255) NOT NULL DEFAULT '',
      `nov` int(11) NOT NULL DEFAULT '0',
      `ras` int(11) NOT NULL DEFAULT '0',
      PRIMARY KEY (`prodid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    :(
     
  5. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    mff Говоря дамп я имел ввиду с данными.. хотя нужно было уточнить конечно :) А то самому выдумывать не улыбается. Дай данных для теста чуток... Если не хочешь здесь палить - можешь стукнуться в аську или пм.
     
  6. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    VDShark, отпраил в пм. :)
     
  7. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    У меня по запросу
    Code:
    SELECT * 
    FROM `products` 
    WHERE `name` LIKE '%амул%'
    ORDER BY `nal` DESC , `name`
    
    все отлично отсортировало :) Показывай какой ты запрос пишешь.
     
  8. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Code:
    $arr = DbQueryToArray("SELECT * FROM `products` WHERE `name` like '%".$search."%' ORDER BY `nal` DESC,`name`");
    и
    Code:
    $count = DbQueryToArray('select count(*) from `products` WHERE  `name` like "%'.$search.'%"');
     
    1 person likes this.
  9. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Выполни в консоли мускула и посмотри на результат... так же перемешанно или нет? Есть подозреие что ф-ция DbQueryToArray как то мешает результат (это что то самописное?).
     
  10. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Какой тип данных в <L использовать для хранения чисел с точкой?
     
  11. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Ага самаписное :) В общем запрос по идее правельный!? Буду смотреть глубже :) Спасибо!
     
  12. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Здравствуйте!

    Нужно сделать выборку из таблицы по условию:
    если первый символ в значении cname равен числу ([0-9]).

    Думаю, что должно выглядеть как то вот так:
    Code:
    SELECT * FROM cat_b WHERE cname LIKE '[0-9]%'
    Поправьте меня пожалуйста, подскажите как правильно :rolleyes:
     
  13. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Мыслиш в правильном направлении, но LIKE тут не проканает. Надо заюзать регулярку - благо мускул (как и постгре и некоторые другие) их нынче держит :)

    http://dev.mysql.com/doc/refman/5.1/en/regexp.html

    Примерно эт будет так
    Code:
    cname REGEXP '^[0-9].*'
    
     
    1 person likes this.
  14. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Здравствуйте.

    Появился ещё один вопрос - Как правильно хранить дату в базе MySQL?

    Подкиньте пожалуйста пример, как правильно занести в базу и какого типа должна быть эта база?

    Мне нужно хранить в базе Дату Рождения, которую Я получаю в виде:
    $d - день [в виде двух цифр - пример 02]
    $m - месяц [в виде двух цифр - пример 12]
    $y - год [в виде 4 цифр - пример 1985]

    В phpMyAdmin есть тип таблицы DATE, в чём его отличие, на пример, от TINYTEXT?

    Заранее благодарен, Большое Спасибо! :rolleyes:
     
  15. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Отличие DATE от того же TINITEXT в том, что ты можешь работать с датой на уровне СУБД (впринципе сможешь и с TEXT, только конвертить прийдется). Если тебе на стороне клиента дату разными способами отображать не приходится - то смело можешь хранить в формате DATE (либо DATETIME). Если же у тебя большое количество вариаций, то имхо лучше в СУБД хранить никс таймштамп и конвертить вне СУБД (тот же пых, или что ты там используешь) в нужный формат.
     
  16. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Окей, а как потом работать с датой? Мне нужно будет делать выборки, например:
    показать все записи с датой от 01.01.08 до 01.01.09
     
  17. nilux

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

    Joined:
    19 Aug 2005
    Messages:
    100
    Likes Received:
    33
    Reputations:
    0
    OnArs как то так =)
    Code:
    SELECT	 *  FROM table WHERE date BETWEEN '01.01.08' AND ' 01.01.09'
    
     
    1 person likes this.
  18. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Спасибо, а то собирался проверять через больше и меньше :)
     
  19. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Подскажите: как правильно заносить в базу данные вроде Agent's Name, в строке встречается апостроф, поле в MySQL - TINYTEXT.

    Сейчас решил, что можно делать через:
    addslashes() при добавлении записи в базу и stripslahes() при выводе строки из базы, но не думаю, что это правильный путь, уверен что есть более удобный вариант.
     
    #519 OnArs, 16 Mar 2009
    Last edited: 16 Mar 2009
  20. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    Для этого есть специальная функция
    http://php.su/functions/?mysql_real_escape_string
     
Thread Status:
Not open for further replies.