За последние 24 часа нас посетили 18314 программистов и 1597 роботов. Сейчас ищут 870 программистов ...

Помогите с запросом

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

  1. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Gromo
    выдает совсем не тот результат, что нужно

    [/sql]
     
  2. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    счас решил проблему получения результата выборки в строку так
    PHP:
    1. $sql_in=mysql_query("select ".$pref."RELATIONS.object  from ".$pref."RELATIONS where ".$pref."RELATIONS.properti=".$key." and ".$pref."RELATIONS.val=".$id."");
    2. while ($in = mysql_fetch_array($sql_in))
    3. $ins[] = $in['object'];
    а потом имплодом в строчку

    если массив $ins будет на несколько десятков тыс. елементов - возможны тормоза сервера (память и проц.) ?
    использую вдс от фирстов 400 проц. 256 памяти
     
  3. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    как через GROUP_CONCAT(CAST(id AS CHAR) SEPARATOR ',') решить проблему "складывания" результата выборки в строку?
    group_concat_max_len увеличил до 16М - не помогло
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    inline
    где ты там используешь GROUP_CONCAT ? и зачем?

    точно. проверить негде было.
    но в любом случае индексы должны помочь
     
  5. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    индексы есть с самого начала
     
  6. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    ну например
    [sql]select GROUP_CONCAT(CAST(MARKET_RELATIONS.object AS CHAR) SEPARATOR ',') from MARKET_RELATIONS[/sql]
    отображает не все значения MARKET_RELATIONS.object в строке
    чтобы получить строку из значений выборки
     
  7. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Читал читал... читал читал... там чо, EAV? И нужно выбрать товар с определенными свойствами из EAV? Так это баян. Таблица свойств джойница сама на себя.

    Или давай схему, объясняй что там что значит, какие данные могут быть и что нужно выбрать.
     
  8. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    MiksIr
    да структура EAV
    есть таблица relations(object,properti,val)
    object - код товара
    properti - код свойства
    val - код значения свойства

    нужно выбрать коды товаров, которые одновремено имеют определеные свойства и значения свойств
     
  9. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    например
    relations
    1 3 4
    2 7 8
    3 1 4
    1 2 6


    нужно выбрать select object where (properti=3 and val=4) and (properti=2 and val=6)

    (properti=3 and val=4) and (properti=2 and val=6) как правильно записать в запросе?

    результат object=1
     
  10. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Вообще-то классика такая
    SELECT t.* FROM tovars t
    JOIN relations r1 ON (t.id=r1.object AND r1.properti=1)
    JOIN relations r2 ON (t.id=r2.object AND r2.properti=2)
    JOIN relations r3 ON (t.id=r3.object AND r3.properti=3)
    WHERE r1.val=100 AND r2.val=200 AND r3.val=300;

    но вообще, в голову пришло, если на (object,properti,val) наложена уникальность, то можно собрать условия через OR, типа
    SELECT object, COUNT(*) as cnt FROM relations WHERE (properti=1 AND val=100) OR (properti=2 AND val=200) OR ... GROUP BY object HAVING cnt=X, где X - количество групп условий соединенных OR.

    попробуйте оба варианта
     
  11. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    немного непонятно как применить к

    relations (object,properti,val)
    1 3 4
    2 7 8
    3 1 4
    1 2 6
     
  12. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    MiksIr
    по проблеме
    select GROUP_CONCAT(CAST(MARKET_RELATIONS.object AS CHAR) SEPARATOR ',') from MARKET_RELATIONS
    отображает не все значения MARKET_RELATIONS.object в строке

    что-то можеш подсказать?