А можно ли это одним запросом или лучше не стоит?

Profic

just Profic (PHP5 BetaTeam)
А можно ли это одним запросом или лучше не стоит?

Имеется список значений (неважно каких, он есть), его нужно отображать в несколько колонок по столбцам да еще и так чтобы пустых мест оставалось как можно меньше, но т.к. таблицы выводятся по строкам, возникает проблема с отображением.
Первоначально все вытаскивалось в массив и потом отображалось... работало очень медленно
Потом переделал в такую конструкцию
PHP:
$q = "CREATE TEMPORARY TABLE names
( num INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
) TYPE=MYISAM AUTO_INCREMENT=1
REPLACE SELECT name_rus AS item, id AS id
FROM t98 
WHERE name_rus REGEXP '^.{0}[0-9]'
ORDER BY name_rus
LIMIT 150
";
vard ($q);
$r = $db->query ($q);
vard ($num = mysql_affected_rows ($db->db_connection));
$col = ceil ($num / 3);
$q = "SELECT item, id, IF((num % $col), (num % $col), $col) AS pos FROM names ORDER BY pos";
vard ($q);
$db->query ($q);
for ($i = 0; $i < $db->num_rows (); $i++) {
 $r = $db->fetch_array ();
 echo "<p>".$r['item'].":".$r['id'];
}
(здесь нет никакого отображения таблиц - это тестовая версия). Эти запросы работают относительно быстро и как им положено (3 - кол-во столбцов), но...
Возникает вопрос, а можно ли такой же результат получить одним запросом? Или лучше не стоит заморачиваться и оставить всё как есть?
ЗЫ. Пишу в 5 утра, поэтому могу чего напутать :), но суть вопроса должна быть понятна :)
 

Larson

Новичок
Что-то я не совсем понял, что в итоге ты хочешь получить.
 

Profic

just Profic (PHP5 BetaTeam)
Я хочу получить вывод в следующем виде
PHP:
+--------+--------+--------+
| value1 | value4 | value7 |
| value2 | value5 |        |
| value3 | value6 |        |
+--------+--------+--------+
 

Profic

just Profic (PHP5 BetaTeam)
Вернее даже
PHP:
+--------+--------+--------+
| value1 | value4 | value7 |
+--------+--------+--------+
| value2 | value5 |        |
+--------+--------+--------+
| value3 | value6 |        |
+--------+--------+--------+
причем если записей не 7 штук, а допустим 4, то вывод должен быть
PHP:
+--------+--------+--------+
| value1 | value3 |        |
+--------+--------+--------+
| value2 | value4 |        |
+--------+--------+--------+
 

Profic

just Profic (PHP5 BetaTeam)
Автор оригинала: Demiurg
делать это надо средствами php а не sql.
Ага, и тормозить оно будет не по детски...
В общем я понял что одним запросом это не сделаешь...
 

Demiurg

Guest
>Ага, и тормозить оно будет не по детски...
с чего бы это ?
 

Profic

just Profic (PHP5 BetaTeam)
>>Ага, и тормозить оно будет не по детски...
>с чего бы это?
Ну а вытаскивание в среднем 150 записей в массив, и потом проход по нему циклом с выборкой данных из разных его частей (по количеству столбцов), разве не повод для торможения?
 

Demiurg

Guest
ты бы объяснил получше, что ты хочешь получить. А то я не вижу связи между семью записями и четыремя. Потом уже можно про массивы говорить.
 

Profic

just Profic (PHP5 BetaTeam)
Итак я вроде как пояснял, что мне нужно получить, но попробуй еще раз :)
Есть:
1) таблица в мускле, с данными.
2) Ее нужно отобразить в несколько "колонок" (реально в колонках таблицы).
3) Данные отображаются не всем скопом (их в райноне 15000 записей), а по страницам.
4) Данные могут фильтроваться различными фильтрами.
Нужно:
Отображать данные в "клонках" и так, чтобы было как меньше пустых полей. Т.к. таблица в HTML заполняется по строкам, то нужно отображаемые данные как бы "повернуть", так, чтобы их можно было просто запихнуть в генерируемый HTML по строкам...
Конкретно бета версия лежит у заказчика на http://www.recipe.ru/docs/ls/php/
 

kvn

programmer
у тебя mysql_query - есть.
mysql_num_rows() - тоже есть.
кол-во столбцов которое нужно отображать - есть (хотя это опционально, его можно из num_rows получать по каким либо критериям..)

это все что тебе нужно.
ИМХО.

П.С. и зачем тебе массив? Вернее, как с помощью массива ты решишь эту задачу, которую не можешь решить без него?
 

Profic

just Profic (PHP5 BetaTeam)
Либо я чего-то не понимаю, либо одно из двух...
Простите, но я не понял вас, привидите, пожалуйста, пример PHP кода, который, по вашему мнению, удовлетворит мои запросы...
Я еще раз повторюсь, задача специфичная, и найти на нее простой ответ мне не удалось...

ЗЫ. Как раз кол-во столбцов-то - задаваемый пользователем (в конфигурационном файле) параметр, а мне нужно в результате найти число строк в которых можно разместить данные...
ЗЫЫ. И еще раз повторю: данные отображаются по столбцам таблицы, в то время как сама HTML-таблица заполняется по строкам. Теперь понятно?
 

Demiurg

Guest
>Отображать данные в "клонках" и так, чтобы было как меньше пустых полей.
отображай все в одной колонке, пустых полей вообще не будет.
 

Profic

just Profic (PHP5 BetaTeam)
Я бы с радостью так сделал, но заказчик, как говорится всегда прав... :)
 

Demiurg

Guest
В чем прав ? В том, что ты не можешь корректно описать задачу ?
 

Profic

just Profic (PHP5 BetaTeam)
>В чем прав ? В том, что ты не можешь корректно описать задачу?
Простите, но я описал задачу, как ее мне задал заказчик, и как я ее вижу... Ничего сверх этого я сказать не могу, ибо говорить мне нечего...
Задача реализована и давайте закроем эту тему? Тем более она далеко ушла от оригинального вопроса...
 

Demiurg

Guest
просто когда задача стоит
"Отображать данные в "клонках" и так, чтобы было как меньше пустых полей." и ничего больше, мне сразу приходит в голову отобразить все в одной колонке. Либо, если придраться к слову "клонках", то есть к его множественному числу, то отображать в двух колонках.
 

Profic

just Profic (PHP5 BetaTeam)
Хм, ладно проехали :)
Меня естраивает вариант приведенный в первом постинге и больше его модифицировать его я не буду...
А все ж таки еще раз попробую описать то, что мне нужно более другими :) словами. То что есть не изменилось
В общем виде (так как была поставлена задача заказщиком): данные предназначенные для отображения нужно вывести в несколько колонок (число фиксированное и задается в конфиге), так чтобы пустых полей было как можно меньше.
А теперь, то что я себе представляю:
- данные предназначенные для отображения нужно вывести в несколько колонок HTML-таблицы, при этом на каждую запись отводиться одна ячейка таблицы;
- в конфигурационном файле указывается максимальное число строк таблицы (в каждой из которых по n ячеек, где n - количество столбцов) допустимых на странице, если значений больше чем максимум, то следует разбить отображаемые данные на страницы (к вопросу не относится)
- если отображаемые данные можно вместить в меньшее число строк таблицы, чем максимум (предыдущий пункт), то нужно сделать это максимально сократив количество отображаемых строк таблицы.

Еще что-нибудь?
 

Long

Новичок
Profic ключевое слово - "отображать". sql нужен для того, что бы выбрать данные. а уж их отображением и разбиением по столбцам и колонкам должне заниматься скрипт.
 

Profic

just Profic (PHP5 BetaTeam)
Ну вот мы и вернулись практически к тому, с чего начинали...
ПисАл же, что вариант с разбиением данных на столбцы средствами PHP очень сильно тормозит, данные выводятся за ~5 секунд, а при использовании мускла удалось сократить это время до ~1 сек.
 
Сверху