За последние 24 часа нас посетили 20876 программистов и 1128 роботов. Сейчас ищут 374 программиста ...

Выборка из базы даже если NULL

Тема в разделе "MySQL", создана пользователем ctekjlo, 21 авг 2009.

  1. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    правда что бы делать такие запросы база должна быть грамотная и если message.id или roles.id_user не будет то мы вернемся к моей проблеме о которой я и задавал вопрос.

    Чесно я думал что есть вариант с подзапросом в FROM
     
  2. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    ctekjlo, это тот же самый INNER JOIN только с другим синтаксисом.
     
  3. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    armadillo не понял?
     
  4. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    чето я запутался а почему explain показывает меньше ROW при таком запросе? и без индексов быстрее делается?
     
  5. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    В книге PHP трюки написано обратное
     
  6. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    вернитесь плиз
     
  7. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    погоди, печатаю.
     
  8. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    ctekjlo
    [sql]EXPLAIN SELECT * FROM `Table1`, `Table2` WHERE `Table1`.`ID` = `Table2`.`ID`[/sql]
    Код (Text):
    1. id    select_type      table    type     possible_keys   key   key_len   ref        rows   Extra
    2.  1        SIMPLE     Table2     ALL       PRIMARY        NULL   NULL     NULL        3   
    3.  1        SIMPLE     Table1     eq_ref    PRIMARY     PRIMARY    4   php.Table2.ID   1
    [sql]EXPLAIN SELECT * FROM `Table1` INNER JOIN `Table2` USING(`ID`)
    EXPLAIN SELECT * FROM `Table1` INNER JOIN `Table2` ON `Table2`.`ID` = `Table1`.`ID`[/sql]
    Код (Text):
    1. id    select_type      table    type     possible_keys   key   key_len   ref        rows   Extra
    2.  1        SIMPLE     Table2     ALL       PRIMARY        NULL   NULL     NULL        3   
    3.  1        SIMPLE     Table1     eq_ref    PRIMARY     PRIMARY    4   php.Table2.ID   1
    Найди три отличия
     
  9. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    А если еще условий добавить то схема не развалится?
     
  10. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    ctekjlo, не развалится. Это разные синтаксисы одной операции. Вот только когда ты пишешь JOIN — сразу видно, где условия соединения таблиц, а где условия выборки.
     
  11. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    Взгляни если есть время

    Палево

    Вот мой запрос для подсчета сделанный с твоей помощью
    [sql]SELECT
    sklad.naimenovanie, //название материалов
    sklad.edizm, //единица измерения
    SUM(nakl.kolvo), //сколько израсходованно
    sklad.now, //сколько на складе
    sklad.price, //сумма израсходованного
    -SUM(nakl.price * nakl.kolvo) //сумма товаров на складе
    FROM
    sklad LEFT OUTER JOIN nakl ON ( nakl.idmat = sklad.id AND tip='rashod' )
    GROUP BY
    sklad.id
    ORDER BY
    sklad.naimenovanie


    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE sklad ALL NULL NULL NULL NULL 362 Using temporary; Using filesort
    1 SIMPLE nakl ref idmat idmat 4 jobs.sklad.id 167
    [/sql]
     
  12. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    PHP:
    1. sklad AUTO_INCREMENT=633 ;
    2. nakl AUTO_INCREMENT=16060
    3.  
    4. id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
    5. 1 SIMPLE sklad ALL NULL NULL NULL NULL [b]362[/b] Using temporary; Using filesort
    6. 1 SIMPLE nakl ref idmat idmat [b]4[/b] jobs.sklad.id 167
    Все путем?
     
  13. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Ты скажи лучше — часто ли будет этот запрос вызываться?
    И часто ли будет делатся UPDATE/INSERT в базе?
     
  14. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    При добавлении товаров удалении и так для просмотра

    Эти таблицы с апреля
    в принцепе расти будет только nakl так как товары почти свегда одни и теже
     
  15. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Раньше было вообще ужасно. Стало намного лучше
    Если SELECT делается намного чаще, чем INSERT/UPDATE, то имеет смысл денормализовать базу, то есть хранить SUM(nakl.kolvo) и -SUM(nakl.price * nakl.kolvo) в отдельных полях таблицы со списком складов, а обновлять эти значения только если они изменятся. Тогда не будет каждый происходить никому не нужный пересчёт, при котором считаются уже посчитанные числа.
    Так, например, устроен форум phpbb. В нем количество сообщений в категории хранится в отдельном поле, а не пересчитывается каждый раз при выборке.
     
  16. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    Под имя это нормально `naimenovanie` varchar(255) NOT NULL default '',
    если делать ORDER BY sklad.naimenovanie или char лучше?
     
  17. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    нормально.
     
  18. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    >>>Раньше было вообще ужасно. Стало намного лучше
    Да стары тип вообще жог
     
  19. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    Самый щик он событие подсветки строк повесил не на TR а на TD и в цикле с document.getElementById менял цвет.
    В таблице в 600 строк были жуткии лаги с подсветкой.
     
  20. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    дааа. ужас.
     
  21. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    только по этому начальство и поняло что там что-то не то
     
  22. ctekjlo

    ctekjlo Активный пользователь

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    Спасибо всем за прокачку в вопросе!!!