За последние 24 часа нас посетили 47660 программистов и 1807 роботов. Сейчас ищет 1041 программист ...

Подсчитать кол-во

Тема в разделе "MySQL", создана пользователем Gambit, 9 июн 2012.

  1. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    SELECT ally_name, ally_crest_id, ally_id, characters.char_name, count.count
    FROM clan_data
    LEFT JOIN characters ON clan_data.leader_id = characters.charId
    LEFT JOIN (SELECT clanid, COUNT(clanid) AS count FROM characters GROUP BY clanid) AS count ON clan_data.clan_id=count.clanid AND clan_data.clan_id=clan_data.ally_id
    WHERE clan_id=ally_id AND characters.accesslevel=0;

    Красным помечена битая часть, не могу додумать.
    ally_id - из запроса берется!!!
    Суть проблемы: [​IMG]
     
  2. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    count.count ? Это как?
     
  4. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    смари ниже LEFT JOIN - алиасы
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    У тебя не верно написано...

    Надо так:

    Код (PHP):
    1. SELECT cd.*,ch.*,ac.*,ccount
    2. FROM clan_data as cd 
    3. INNER JOIN characters as ch 
    4. ON cd.leader_id=ch.charId 
    5. LEFT JOIN accounts as ac
    6. ON ch.account_name=ac.login
    7. LEFT JOIN (SELECT clanid, count(char_name) AS ccount
    8. FROM characters WHERE clanid GROUP BY clanid)
    9. AS all_chars ON cd.clan_id=all_chars.clanid

    Код (PHP):
    1. 'topclans' => "
    2.         SELECT cd.*,char_name,ccount,onl,ct.name as castle_name
    3.         FROM clan_data as cd
    4.         INNER JOIN characters as c 
    5.         ON cd.leader_id=c.charId 
    6.         AND clan_level>='{clanlevel}' 
    7.         LEFT JOIN (
    8.         SELECT clanid,count(level) as ccount,sum(online) as onl
    9.         FROM characters WHERE clanid 
    10.         GROUP BY clanid) as levels 
    11.         ON cd.clan_id=levels.clanid 
    12.         AND clan_level>='{clanlevel}'
    13.         LEFT JOIN castle as ct
    14.         ON ct.id=cd.hasCastle
    15.         ORDER BY clan_level DESC,ccount DESC
    16.         LIMIT {limit}"
    17.  
    Давно писал, смотри логику и переделывай, мне лень, что - то делать. =)
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Для начала - заключи названия всех полей, таблиц и алиасов в косые кавычки (`) - которые на букве ё при английской раскладке клавиатуры. Иначе такие слова как count оно по идее воспринимает как названия функций, а не как названия полей и т.п.
     
  7. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    В другом запросе все норм.
    Your, короче мне нужно посчитать кол-во членов в альянсе)) То что ты выдрал из СВ мне не катит) Там нет ТОП Али.
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Какое к черту св, ахаха...

    Где ты там видел такое?)

    Я тебе дал, то , что я писал себе давно...
    Тут про кланы, по логике бери и пиши про альянсы там примерно, тоже самое будет.

    Или в платник, найдутся храбрецы сделают! =)
     
  9. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    2 запрос снят с СВ)) А не 1й. Я же узнаю)
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Откуда у тебя такие намерения ?
    Я сам его писал.

    Че ты там узнаешь?)) Ахаха...
     
  11. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    окей, тогда как ты объяснишь, почему ты запросы пишешь в куске массива? хДДД Это выдранный кусок массива, я что не вижу чтоли? + такая манера массива у СВ разработчиков помню.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    видимо он несколько запросов делает в цикле =) и решил вместо того, чтобы писать ручками вот замутить массив. вот такой он маленький извращенец.
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Я тоже использую массивы...

    Но раз такое дело, то фиг с ним... =)
    Он у меня спиздил =), потому, что у этого говна брать не фиг

    Добавлено спустя 10 минут 58 секунд:
    блин врнатури почти такой же, ЛОЛ!

    Код (PHP):
    1. "getTopClan"=>"
    2.         SELECT clan_data.clan_name, clan_data.clan_id, clan_data.ally_name, clan_data.clan_level, clan_data.reputation_score, clan_data.hasCastle, characters.char_name, ccount 
    3.         FROM `clan_data` 
    4.         LEFT JOIN `characters` ON characters.charId = clan_data.leader_id 
    5.         LEFT JOIN (
    6.             SELECT clanid, count(level) AS ccount 
    7.             FROM characters 
    8.             WHERE clanid GROUP BY clanid
    9.             ) AS levels ON clan_data.clan_id = levels.clanid 
    10.         ORDER BY clan_data.clan_level DESC, clan_data.reputation_score DESC 
    11.         LIMIT {limit}" 
    только не совсем такой...

    Да вообще мне по фиг..
    Я это давно уже писал =)
     
  14. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    Проехали, а массив СВ юзает не для цикла, а для шаблонности)) А вот зачем мне Юра показал свой вариант в массиве хз)

    Добавлено спустя 1 минуту 37 секунд:
    Во всяком случае я делаю не топ кланов,а топ Али. Мне нужно посчитать сколько игроков в одном альянсе. Т. е. предположим в альянсе 3 клана, и в каждом клане по 50 человек. Получается в али 150 чел. Вот как блин сделать такой запрос, я голову ломаю уже не могу. И реально ли это вообще в одном запросе сделать?
     
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Св типо MVC только у него это ужасно и не верно!


    Я делал али в одном все было, так, что мучай!
    Я там делал и подсчет и кто онлайн из али и сколько всего онлайн из али =)
     
  16. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    Да я то допетрю и все что ты сказал, мне еще предстоит=) Только я не понимаю зачем ты тогда сидишь на этом форуме. Я сюда написал чтобы помогли поскорее разобраться.
     
  17. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Отдыхаю.
    Можно тут, сразу цену!
    А там и поговорим, да нет =)

    Ну или сам думай.

    А то ты с таким возмущением быстро сразу помогите мне я вашь король блин!
    Ну дак, флаг в руки =)
     
  18. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    Да нет, спс. Сам разберусь.
     
  19. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Не смею вас задерживать!
    Милорд :D

    Удачи! =)
     
  20. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    Не было времени раньше, вот сел 30-40мин помудился и вуаля (мб кому понадобиться):

    Код (Text):
    1. SELECT ally_name, ally_crest_id, ally_id, characters.char_name, cd.count
    2. FROM clan_data
    3. LEFT JOIN characters ON clan_data.leader_id = characters.charId
    4. LEFT JOIN (
    5.     SELECT ally_id AS ad, COUNT(*) AS count
    6.     FROM clan_data
    7.     LEFT JOIN characters ON clan_data.clan_id = characters.clanid
    8.     GROUP BY ad
    9. ) AS cd ON clan_data.ally_id = cd.ad
    10. WHERE clan_id=ally_id AND characters.accesslevel=0
    11. ORDER BY cd.count DESC;
    Вот и все Your, обещал разберусь же)
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сложноватый запрос...
     
  22. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  23. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    это мое фото) Я и в жизни так хожу постоянно.

    Добавлено спустя 14 минут 48 секунд:
    Да и не токае делал, хотя это самый сложный запрос на сегодняшний день, который мне когда-либо приходилось делать.
    Вот что ранее было:

    Для каждой базы форума (модуль последние новости) IPB, phpBB, SMF, vBulletin, XenFoRo одним запросов вывожу:
    - Название темы
    - Автор
    - Ссылка на форум
    - Ссылка на автора
    - Дата
    - Последний автор
    - Ссылка на последнего автора
    - Последний пост
    - Ссылка на последний пост
    - Дата последнего поста
    - Раздел форума

    =)
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    лучше найди способ избавиться от вложенного селекта. тогда будет круто.
     
  25. Gambit

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

    С нами с:
    4 июн 2012
    Сообщения:
    108
    Симпатии:
    0
    Хмм, а почему Вы решили что от них можно избавиться и почему это плохо?=) Или писать 2 запроса лучше?

    Добавлено спустя 22 минуты 3 секунды:
    Во всяком случае, если у Вас есть идея как это сделать, то не я не прочь посмотреть, даже интересно =) И респект Вам, если сделаете это.