Member 14865416 Ответов: 1

Пожалуйста помогите исправить неправильный запрос PHP mysql


Эта страница предназначена для просмотра на самой популярной программе в самых популярных городах, поэтому ниже приведен код для этого. Вывод самых популярных городов работает нормально, но самая популярная программа в этих городах показывает неверный вывод. Может ли кто-нибудь помочь проверить мой запрос, если есть какая-то ошибка? Большое вам спасибо за ваше время.

Что я уже пробовал:

<pre><table class="table table-striped table-dark">
<thead>
 <tr>
            <td>City</td>
            <td>Popular Programme</td>
        </tr>
    </thead>
         <tbody> 
<?php
                         $query = " SELECT student_city, count(*) AS count, student_prg FROM marketing_data GROUP BY student_city ORDER by count desc LIMIT 3;";
                if(count(fetchAll($query))>0){
                    foreach(fetchAll($query) as $row){
                        ?>
                    <tr>
                    <td><?php echo $row['student_city'] ?></td>
                      <td><?php echo $row['student_prg'] ?></td>
                      </tr>             
            <?php
                    }
                }else{
                    echo "<script>alert('No record')</script>";
                }
            ?>
         </tbody>  
      </table>


структура таблицы
CREATE TABLE marketing_data
(
student_matric VARCHAR NOT NULL AUTO_INCREMENT,
student_prg TEXT NOT NULL,
semester VARCHAR(10) NOT NULL,
intake_session INT(1) NOT NULL,
intake_year INT(10) NOT NULL,
student_city TEXT NOT NULL,
city_lat VARCHAR(20) NOT NULL,
city_long VARCHAR(20) NOT NULL,
student_state TEXT NOT NULL,
state_code VARCHAR(100) NOT NULL
); 


Вывод из консоли MySQL:
+---------------+------------------+------+-----+---------+-----------------
| student_city  | count |        student_prg              |
+---------------+------------------+------+-----+---------+----------------+
| Kuala Dungun  |   4   | Bachelor of Multimedia Industry |
|   Jerantut    |   3   | Bachelor of Multimedia Industry |
|Bukit Beruntung|   3   | Bachelor of Software Engineering|
+---------------+------------------+------+-----+---------+----------------+

0x01AA

Проблема, я думаю, исходит из student_prg По крайней мере, MS SQL даже не даст вам результата, он выдаст сообщение об ошибке что-то вроде "недопустимое поле", потому что это не агрегат .
Прочтите, например, здесь: SQL GROUP By и ошибка "имя столбца недопустимо в списке выбора, потому что..." [^]

Member 14865416

Привет, спасибо за ваш ответ. Могу ли я узнать, каков правильный запрос для выполнения ожидаемого результата? Потому что не было никакого сообщения об ошибке, когда я запускал его в консоли MySQL.

0x01AA

Позвольте мне сначала задать вопрос: Действительно ли консоль MySQL дает результат без сообщения об ошибке для оператора _exactly same_ SQL? В это трудно поверить...

Member 14865416

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

0x01AA

Очень странный.
Итак, каков правильный запрос? Это зависит....
В случае, если student_prg может быть разным для каждой группы по student_city, единственное, что я вижу, это GROUP BY student_city, student_prg Но, похоже, это не то, что вы хотели бы получить в результате.

Member 14865416

Да, именно так. Группа по student_city, student_prg работает как показ городов, которые имеют подобную программу. Например, у Гуа мусанга есть 2 записи, и обе записи берут бакалавра мультимедийной индустрии. Так что система выбирает только то, что не считается первым, какой город является самым популярным.

0x01AA

Правильно ли я это понимаю? Вам нравится иметь три самых популярных города/prg и иметь город только один раз в результате? (О боже, мой английский настолько плох, что я надеюсь, вы понимаете, что я имею в виду...)

Member 14865416

Все в порядке, я тебя понимаю... Мне нравится иметь самую популярную программу в самых популярных городах. Во-первых, город должен быть самым популярным по сравнению с другими городами. Во-вторых, программа в этом городе должна быть самой популярной по сравнению с другими программами в этом городе.

Member 14865416

Я нашел решение с помощью этого запроса выберите student_city как original_student_city, count(*) как кол, (выберите student_prg от marketing_data где student_city = original_student_city группы по student_prg того, граф(student_prg) деск лимит 1) Как new_student_prg от marketing_data группы по student_city заказа по кол-ву по убыванию лимит 3; и она прекрасно работает сейчас. В любом случае, спасибо, что уделили мне время. Хорошего дня....

0x01AA

:большой палец вверх: