Не получается сделать выборку по дополнительному критерию

Discussion in 'PHP' started by serg-php, 17 Jul 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Есть 2 таблицы: TABLE_USER и ARTICLE_TABLE

    Имею запрос
    $sql = "SELECT id,username,gorod,country,avatar,surname,status,UNIX_TIMESTAMP(regdate) AS regdate FROM ".TABLE_USER.
    " WHERE avatar!='' AND surname!=''".
    " ORDER by status ASC LIMIT ".($off*$num).",".$num;
    который выводит юзеров, которые загрузили аватар и указали фамилию.

    А как теперь модифицировать запрос, чтобы вывести тех у кого более 2- статей?
    Стоит или в запросе совмещать две таблицы?
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    http://ru.wikipedia.org/wiki/Join_%28SQL%29
     
  3. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Isis,

    спасибо!
    Ознакомился, единстенное - запрос правильно сформулировать не могу!

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

    Моя задача стоит - отсортировать данные из первой таблицы пользоватлей по критерию количества новостей во второй таблице!
     
    #3 serg-php, 17 Jul 2011
    Last edited: 17 Jul 2011
  4. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Второй вариант.

    Необходимо отсортировать пользователей по кол-ву у них статей.

    Как оптимальнее это сделать?
     
  5. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    select u.login,(select count(id) from article where uid=u.id) c from users u
    join article a
    on u.id=a.uid
    where
    u.avatar!='' and u.surname!=''
    group by a.uid
    order by c desc
     
  6. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Чакэ,

    спасибо! Думаю, это вариант. Сейчас попробую.

    А не положит ли такой запрос сервер при нагрузке?
     
  7. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    естественно положит.
     
  8. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Может быть его по-другому составить?
     
  9. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    ну ищите вариант оптимальней. а верить на слово в тырнете не стоит. секундомер вам в помощь.
     
  10. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    А можно ли несколькими селектами и сопоставлениями? Будет ли так производительнее?
     
  11. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Значит, решение будет следующим - созать дополнительное поле в таблице юзеров, в которое заносить скриптом кол-во статей по крону, а далее просто забирать селектом.
     
  12. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    крон не нужен. разве не проще +/- 1 к полю при добавлении/удалении статьи делать?
     
  13. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0

    И такой вариант возможен.
     
  14. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Можно и так, только все равно нужно написать массив, который сделает записи в поле кол-во статей уже по имеющемуся количеству.
     
  15. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Попутно еще вопрос.

    Есть такой запрос к базе

    PHP:
        $numrows $db->one_data('SELECT COUNT(*) FROM '.TАBLЕ_USERS.
                   
    " WHERE deactivated='0' AND (status LIKE '[Gold%' OR status LIKE '[Silver%' OR status LIKE '[Pro%')
                     AND logo!=''"

    Есть поле userlogin в TАBLЕ_USERS, в котором есть значения с некорректными символами типа "-,_".
    Можно ли добавить условие в запрос, чтобы такие заначения пропускались?

    Или проще скриптом откореектировать значеня в userlogin ?
     
  16. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    щито это за бред с массивами? field=field+1
     
  17. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Чакэ,

    Вы меня не поняли. Я имею ввиду, что допустим у юзера уже размещено 5 статей, то чтобы добавть +1, в ячейке уже должно быть значение 5. А если значения не заполнены по имеющемуся кол-ву статей у пользователей, то добавление 1 даст в сумме 1!
     
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Чем именно они некорректны

    Что значит пропускались? А вообще я разрешаю, если вам разрешение нужно

    Один раз с помощью подзапроса установите текущее количество статей, в чем проблема?
     
    _________________________