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

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

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

    cat1vo Level 8

    Joined:
    12 Aug 2009
    Messages:
    375
    Likes Received:
    343
    Reputations:
    99
    В sql есть функция avg() которая выводит среднее арифметическое, зачем велосипед изобретать? ;)
     
  2. loze_mc

    loze_mc New Member

    Joined:
    2 Oct 2011
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    как проверить ячейку(ки) на пустоту?
     
  3. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Ну да, нужно :D
     
  4. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Вообще туго с мускулом :confused:
    Ну так:
    WHERE foo = NULL
    есть еще IS NULL и Функция IFNULL()
    читайте елы-палы mysql.ru,
    вообще читайте что нить! Можно даже Л.Толстого "Война и мир", читать полезнО!
     
  5. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Помогите составить сложный sql запрос.
    Есть две таблицы, в первой столбцы:
    id_pm id_pm_head id_member_from from_name msgtime subject body
    во второй столбцы:
    id_pm id_member и т.д.,
    мне надо 1 запросом извлечь инфу из первой таблицы (конкретно - body, но по определенному критерию через WHERE ), а из второй выбрать id_member в тех записях, в которых id_pm такой же, как в первой таблице.

    Я пишу примерно так:
    Code:
    SELECT TABLE1.msgtime, TABLE1.body
    FROM TABLE1
    INNER JOIN TABLE2 ON TABLE1.id_pm = TABLE2.id_pm
    WHERE `from_name` = \"kot\";
    Выводит данные лишь с первой таблицы. Куда мне вставить id_member, чтобы и его тоже вывело?
     
  6. cat1vo

    cat1vo Level 8

    Joined:
    12 Aug 2009
    Messages:
    375
    Likes Received:
    343
    Reputations:
    99
    Code:
    SELECT TABLE1.msgtime, TABLE1.body, TABLE2.id_member
    FROM TABLE1, TABLE2 
    WHERE from_name = 'kot' AND TABLE1.id_pm = TABLE2.id_pm;
     
    1 person likes this.
  7. foma9999

    foma9999 New Member

    Joined:
    5 Jan 2010
    Messages:
    83
    Likes Received:
    2
    Reputations:
    -5
    В таблице, неск. полей содержит текст. данные вида
    PHP:
    123;23213;433523;4363243;464534
    Необходимо выбрать такое поле, в котором нет опр. набора цифр (они передаются гет запросом). Извлекать по поочереди и перебрать средствами пхп не вариант.
    Нужен какой-то аналог ф-ии strstr в пхп. Если Выбрать то-то, то-то, WHERE (values,$_GET['123'])==false
    Как-то так я себе это представляю.
     
  8. mironich

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

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Code:
    SELECT блалбла FROM блабла WHERE  блалбла ! 123
     
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    foma9999 http://www.mysql.ru/docs/man/String_functions.html

    LOCATE() и INSTR() вроде как. Но если записей в таблице много - так лучше не искать и подумать в сторону изменения таблицы
     
    _________________________
  10. mironich

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

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    В таблицу добавляется продавец, товар(который он продает), товар может повторяться как бы сделать проверку на повторение товара, а если отсутствует все таки добавить его?
    Думаю select делать с именем товара слишком жирно.
    //upd зделал через тригер.
     
    #1710 mironich, 14 May 2012
    Last edited: 14 May 2012
  11. cat1vo

    cat1vo Level 8

    Joined:
    12 Aug 2009
    Messages:
    375
    Likes Received:
    343
    Reputations:
    99
    to mironich
    Вопрос был решен!
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    mironich INSERT IGNORE как бы. По num_rows можно определять какие записи уже существуют.
     
    _________________________
  13. A1exx

    A1exx New Member

    Joined:
    8 Feb 2009
    Messages:
    24
    Likes Received:
    4
    Reputations:
    0
    Привет античатовцы, помогите пожалуйста с нормализацией таблиц.

    Сделал общую таблицу, по-моему 1ую Норм форму, помогите разбить её до 3ей норм.формы.

    Заранее огромное спасибо,ну или намекните как это сделать.
    Структура моей таблицы:
    Тема - продажа пассажирских билетов на поезд


    Тип поезда Тип вагона Кол-во вагонов Цена Направление Время отр-ния Время прибытия Кол-во заказов Скидки
     
  14. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Смотри в книгах как приводить к нормальным формам. Вторая это по памяти по - моему когда отсутствуют частичные зависимости, а третья - когда отсутствуют транзитивные связи.
     
  15. banality

    banality New Member

    Joined:
    13 Aug 2011
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    1-ая в каждой ячейке одно значение;
    2-ая это 1ая + в каждой таблице ключ, хотя б суррогатный, а так же зависимостей не должно быть (т.е часто таблица при этом на еще таблички делится);
    3-я это 2ая + не должно быть быть транзитивных зависимостей, т.е в какой то 1 таблице могут быть зависимости среди не ключевых полей (это транзитивность и ее не должно быть).

    Это конечно все на пальцах и коротко, а вообще вот что те надо
     
    #1715 banality, 5 Jun 2012
    Last edited: 5 Jun 2012
  16. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Помогите составить запрос..

    Имеется таблица с 3 полями ip:fid:date
    Связка ip:fid уникальный индекс

    И мне нужно составить статистику.. Например какие файлы скачивали сегодня (fid - ид файла)

    делаю так:

    PHP:
    select distinct fid from mod_stat WHERE date BETWEEN '$ts' AND '$te' LIMIT 10
    где $ts и $te время начала дня и конца дня (в юникс секундах)

    Но хотелось бы сразу вытащить и сколько фаил за сегодня скачали.. т.е получить на выходе массив ид:скачиваний

    Но с distinct нельзя использовать count(*)

    А т.к база через месяц будет огромна..Ну очень, хотелось бы лишний раз ее не ворошить и вытаскивать все сразу.

    И как выбрать самые скачиваемые файлы за сегодня?

    делаю так:

    PHP:
    select fidcount(*) from mod_stat WHERE date BETWEEN '$ts' AND '$te' group by date LIMIT 10  
    Но нужно еще как-то условие, чтоб count(fid) было MAX
     
  17. banality

    banality New Member

    Joined:
    13 Aug 2011
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    -=Zhenek=-

    Не совсем понятно, что тебе надо с дистинктом

    Вроде ж как есть конструкция
    А вообще (если я тебя правильно понял), у меня похожая проблема была неделю назад, один трушный дядька мне посоветовал добавить лишнее поле(табличку) чисто с счетчиком(или что то похожеЕ, параметр по которому можно было определить в твоем случае скачку), по которому ты и будешь вытягивать САМЫЕ САМЫЕ простым SELECT MAX(field)

    /p.s надеюсь помог :-[
     
    #1717 banality, 6 Jun 2012
    Last edited: 6 Jun 2012
    1 person likes this.
  18. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    >Имеется таблица с 3 полями ip:fid:date
    время уточните в каком формате, Юникстайм?
     
  19. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    ну если юникстайм то возможно:
    SELECT fid, COUNT(fid) AS fidcount // фид и его кол-во
    FROM table // тэйбл :)
    WHERE DATE(FROM_UNIXTIME(date)) = CURDATE() // выборка записей за сегодня
    GROUP BY fid // группировка по фид
    ORDER BY fidcount DESC// сортировка по кол-ву
    LIMIT 10; // 10 самых
     
    #1719 Art!P, 6 Jun 2012
    Last edited: 6 Jun 2012
    1 person likes this.
  20. Kruzak

    Kruzak New Member

    Joined:
    21 Dec 2010
    Messages:
    126
    Likes Received:
    4
    Reputations:
    1
    Подскажите как заменить NULL в полях на 0?

    вот так делаю
    Code:
    update Table1 set Score1 = replace(Score1, NULL, '0');
    заменяет абсолютно все поля не только NULL на 0
    а мне нужно только NULL
     
Thread Status:
Not open for further replies.