Пожалуйста помогите исправить неправильный запрос 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
:большой палец вверх: