За последние 24 часа нас посетили 18904 программиста и 1686 роботов. Сейчас ищут 845 программистов ...

Изменение результата запроса

Тема в разделе "MySQL", создана пользователем joost, 18 янв 2010.

  1. joost

    joost Guest

    [sql]select *, count(name) as cn from value where properti=3 and type=72 group by name order by cn desc limit 5[/sql]
    при таком запросе - результат изменяется 2-3 раза после нового выполнения, после чего устаканивается на одном результате.
    п/с ни добавление, ни удаление в это время не проходит (все на локалке)

    из-за чего может менятся результат выборки?
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Из-за того что "select *" с "group by name" дают непредсказуемые результаты.
     
  3. joost

    joost Guest

    чем заменить? как по другому запрос переделать?
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Какие данные есть в базе?
    Какие данные надо получить?
     
  5. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
  6. joost

    joost Guest

    есть таблица значения свойств
    properti - код свойства
    например
    type - тип товара (пылесос, телефон и т.д.)

    нужно выбрать те свойства, для которых есть максимум (больше чем у других) значений свойст
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    [sql]select prop.name, count(val.id) as num
    from val left outer join prop on prop.id=val.properti
    group by prop.name
    order by num desc limit 5[/sql]
     
  8. joost

    joost Guest

    Volt(220)
    в запросе теже name и group by name

    чем Ваш запрос лучше моего?
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)При использовании group by результат выдается по группе. Таким образом если некое поле присутствует в select но не присутствует в group by или агрегирующей функции, то не понятно к какой группе его относить.
    В Вашем запросе в "*" может быть несколько таких полей.
    2) Ваш запрос примененный к первой приведенной таблице не решает поставленной задачи.
     
  10. joost

    joost Guest

    [sql] select *, count(name) as cn from value where properti=3 and type=72 group by name order by cn desc limit 5[/sql]
    изменен на
    [sql]select id, name, count(name) as cn from value where properti=3 and type=72 group by name order by cn desc limit 5[/sql]

    решит проблему?
     
  11. joost

    joost Guest

    немного неправильно сформулировал задачу запроса

    это конечная задача

    задача запроса
    найти, те свойства, что есть у максимум товаров.
     
  12. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    id - не подходит под указанные критерии. MSSQL Server выдаст ошибку при попытке выполнения запроса, MySQL, насколько я понял, выдаст id соответствующий первой записи в группе, а первой записью может оказаться любая запись в группе.

    Что-что?
    Наиболее часто встречающиеся свойства? Тогда нужна таблица связей товаров и свойств.
    Какому типу товара принадлежит больше всего свойств? Тогда и группируй по типу товара:

    [sql]select type, count(name) as cn from value group by type order by cn desc limit 5[/sql]