![]() |
Сортировка массива В PHP+MySQL
Люди нужна ваша помощь!!!
Надо отсортировать такой вот массив (берется он из MySQL-я) Код:
id | thing | company |Сначала должны идти нужные компании, например company03 и вся ее продукция, потом должна идти следующая нужная компания например company01 и вся ее продукция и т.д. последовательность компаний может браться из еще одной таблицы или быть прописана прямо в коде, это не принципиально. Сортировка thing-ов не важна, ну точнее не очень важна, но если она будет, чтож - хорошо ;) Да, thing-и должны сортироваться внутри своей компании, а не во всей таблице. Соответственно можно загнать всю базу в PHP массив и сортировать его, а можно попытаться выполнить сортировку с помощью запросов MySQL, а можно и совместить два эти метода. Можно внести в таблицу еще один параметр, что-то типа индекса положения компании, например при 1 компания на 1-ом месте, при 2 на втором и т.д., а компании без этого индекса идут после индексированных в алфавитном порядке. Ваши советы, рекомендации (желательно с примером кода :) ), а то у меня есть куча идей, да не знаю как же все-таки все это лучше сделать. Всем соответственно заранее огромное спасибо. :) |
Ну присваивать компаниям еще дополнительные номера - это удобно, но вроде не очень приветствуется примерными программистами :p Хотя это не плохой вариант. Но я бы прямо в PHP выполнил несколько запросов:
SELECT from <table> where company=company01 Select from <table> where company=company02 и т.д. А если company01 и company02 будут значениями какой-нибудь переменной вроде: $company="company01"; $sql="SELECT from <table> where company=" то в процессе программы придется менять только $company а запрос будет выглядеть как mysql_query($sql.$company) (точно функцию mysql_query не помню, может не так пишется...). :rolleyes: |
На самом деле кривые таблицы.
Лучше сделать так: 1. Таблица <table_1> содержит названия компаний, ее контакты и так далее. В этой таблице каждой компании присвоится уникальный айди. 2. Таблица <table_2> содержит информацию по производству компаний, где в роли определителя компании служит уникальный айди с первой базы. Теперь SQL-запрос: Код:
$sql = mysql_query("SELECT id, name FROM <table_1>"); |
Разбить на две таблицы - это правильно.
А ещё можно всё в один большой запрос запихать через JOIN |
EvroStandart
Можно конечно. Я привел простейший пример. Вот как выглядит все одним запросом. Код:
SELECT t1.id, t1.name, t2.production, t2.[...], t2.[...] FROM <table_1> t1, <table_2> t2 WHERE t2.company_id=t1.id |
Цитата:
Мне незачем разводить несколько таблиц, айдишник конечно весит меньше чем имя компании (информацию по компаниям можно сложить в отдельную таблицу, но пока в этом нет необходимости, мне нужно только имя компании), но у меня не такая уж и большая база чтоб заморачиваться по этому поводу. Вторая таблица мне нужна для того, чтоб там хранить очередность (по именам компаний) по которой компании должны идти при выводе. Я склоняюсь к варианту The_naked выбирать из базы товары нужного производителя и загонять их в массив PHP в нужном порядке, а потом выводить. Мне можно на самом деле написать скрипт который будет сортировать не результат (выводимый юзеру) из перемешанной базы при каждом запросе юзера, а будет сортировать САМУ базу ОДИН раз (из админки или чего-то типа того), а потом выводится будет просто все подряд. Нагрузка на сервер меньше - быстродействие больше. Или что-то в моих мыслЯх неверно? Сортировка на лету по запросу пользователя мне пока не нужна. |
To:Hatifnatt
Наиболее очевидно сделать следующее: 1) Заводим таблицу Т1 с именами компаний в нужном порядке. 2) Получаем список ВСЕХ компаний из основной таблицы в временную таблицу Т2. 3) Последовательно выбираем из базы продукты для имени компании из таблицы Т1. После выбора всех продуктов, удаляем имя этой компании из таблицы Т2. 4) После окончания обработки всех записей имен компаний из таблицы Т1 выбираем из базы продукты по ОСТАВШИМСЯ именам компаний из таблицы Т2. Пример кода не даю ибо не силён в PHP :cool: (думаю что это должно быть просто, так как решение простое). Возможно найдётся человек, который составит более элегантный алгоритм или предложит другое решение. Может быть возможно избавиться от пункта 2 и тем самым уменьшить количество обращений к базе :idontnow: . |
Вот решение:
Код:
<?php |
Хм, а зачем вы такие хитрые-то?
Если список всех компаний заранее известен и не слишком велик, то можно без проблем использовать ORDER BY FIELD: Код:
SELECT * FROM tablename ORDER BY FIELD(company, 'company3', 'company1', ....)Код:
SELECT * FROM tablename ORDER BY FIND_IN_SET(company, 'company1,company3') DESC |
Saruman
Спасибо, пожалуй переделаю так как ты советуешь. Намного более простой и быстрый вариант. :yees: |
| Часовой пояс GMT +4, время: 20:43. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.