MySQL Query проблема в CodeIgniter - PullRequest
       9

MySQL Query проблема в CodeIgniter

0 голосов
/ 29 апреля 2010

Итак, я использую следующее:

    $r = new Record();
    $r->select('ip, count(*) as ipcount');
    $r->group_by('ip');
    $r->order_by('ipcount', 'desc');
    $r->limit(5);

    $r->get();

    foreach($r->all as $record)
    {
        echo($record->ip." ");
        echo($record->ipcount." <br />");
    }

Стандарт:

SELECT `ip`, count(*) as ipcount FROM (`soapi`) GROUP BY `ip` ORDER BY `ipcount` desc LIMIT 5;

И у меня выводится только последняя (пятая) запись, а нет ipcount отражается.

Есть ли другой способ обойти это? Я работаю над изучением DataMapper (отсюда и вопросы) и мне нужно разобраться с этим. Я не совсем обернул голову вокруг всего ORM.

Есть ли способ установить count(*) as ipcount без забавного оператора select()? Я не думаю, что это вызывает по какой-то причине. Это также может быть ошибкой в ​​DataMapper, но я менее уверен в этом.

Также я обнаружил, что даже если я использую метод $r->query(), он не возвращает ничего, кроме последней записи, если я использую что-то вроде SELECT ip FROM soapi WHERE 1;. Однако он вернет все (как и должно быть), если я скажу SELECT * FROM soapi WHERE 1;. Если он не имеет *, он возвращает только последнюю строку.

Только что подтверждено новым запросом, все, кроме выбора всех столбцов (*), возвращает только последнюю запись. Любая помощь с этим была бы великолепна. Вы можете создать утверждение типа select *, count(*) as ipcount, но тогда у вас все равно не будет доступа к нему через $record->ipcount.

1 Ответ

0 голосов
/ 25 ноября 2011

В вашем случае, если вы используете функцию COUNT () в MySQL, она вернет только 1 значение. Следовательно, вы ip данные результатов не отобразите.

Я предлагаю вам просто разделить эти 2 запроса. 1. для COUNT (*) 2. для ip

Надеюсь, эта помощь.

...