|
|
|
| такой вопрос, нужно сформировать список по алфавиту как сделано на странице
smartphone.ua/words.html
но в моём случаи - автосалоны, которые нужно вывести все на одной странице, где каждый автосалон должен размещаться под буквой с которой начинается название автосалона. Сделать также как на выше приведённой странице.
Все автосалоны хранятся в базе данных, каким образом построить подобную алфавитную структуру через PHP как на том сайте? | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 08:52)
| | Да вам вроде бы ответили в MySQL - ORDER BY name. Или проблема потом разбить этот вывод по алфавиту? | |
|
|
|
|
|
|
|
для: sim5
(03.10.2008 в 08:58)
| | всё верно, там был ответ, но не тот, там просто список по имени был отсортирован, а нужно из этого списка при помощи PHP сформировать по алфавиту. Я изначально не правильно подумал, думал что всё это можно было при помощи MySQL сделать.
Trianon, спасибо большое за ваш пример, сейчас посмотрю | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 08:52)
| |
<?
for($letter = ''; $row = mysql_fetch_assoc($res); )
{
$id = $row['id'];
$name = $row['name'];
$first = $name[0];
if($letter != $first)
echo "<br /><h1>".htmlspecialchars($letter=$first)."</h1><br />\r\n";
echo "<a href=?id=$id>".htmlspecialchars($name)."</a><br />\r\n";
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(03.10.2008 в 09:05)
| | я посмотрел, список группируется по буквам, но не совсем так как нужно, нужно чтобы для каждой буквы входили все записи а сейчас они повторяются таким образом
A
Art-Service 1
A
Art-Service 2
Т
ТурЭкспресс 1
Т
ТурЭкспресс 2
а нужно так
A
Art-Service 1
Art-Service 2
Т
ТурЭкспресс 1
ТурЭкспресс 2
наверное нужно как то формировать массив, где ключ - буква алфавита, а значение найденые записи | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 17:45)
| | У вас после запроса к базе должен быть список отсортированный по имени, и тогда что вам прописал Trianon будут работать как часы. | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 17:45)
| | фрагмент кода, дамп и результат в студию. | |
|
|
|
|
|
|
|
для: Trianon
(03.10.2008 в 19:12)
| | да всё верно, чёт я сортировку забыл указать, только при запуске почемуто ошибку выдаёт
Parse error: parse error, unexpected ')', expecting ';' in c:\server\www\index.php on line 56
|
56 строка
for( $letter = '', $row = mysql_fetch_assoc($result); ) {
|
если эту строку заменяю на
while($row = mysql_fetch_assoc($result)){
|
то ошибка исчезает и записи выводятся
ниже привожу весь код
<?php
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'base';
$db_prefix = 'pref_';
define ("PREFIX", $db_prefix);
$conn = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name,$conn);
$sql_result = "SELECT
" . PREFIX . "data.id,
" . PREFIX . "data.description,
" . PREFIX . "data.name
FROM `" . PREFIX . "data` ORDER BY name";
$result = mysql_query($sql_result);
//while($row = mysql_fetch_assoc($result)){
for( $letter = '', $row = mysql_fetch_assoc($result); ) {
$id = $row['id'];
$name = $row['name'];
$first = $name[0];
if($letter != $first)
echo "<h5>".$first."</h5>\r\n";
echo "<a href=?id=$id>".$name."</a><br />\r\n";
}
?>
|
при выполнении этого кода, выдаёт ошибку которую упомянул выше
скобки вроде проверил все на месте
Всё разобрался, оказывается там нужно было в место запятой указать точку запятую, я на это не обратил внимание
for( $letter = ''; $row = mysql_fetch_assoc($result); ) {
|
вот теперь правильно, но список к сожалению не формируется как на том сайте, ниже привожу пример результата
Т
Тимур
Х
хозяйка
У
Управляющая компания ОАО "Новая площадь"
Т
торговый дом "ДАНА"
У
Универсал-Спецтехника-0СПб
Т
ТНТ Клуб
Тотал Авто
Туан
турфирма
турфирма Астрела ООД, Болгария
ТурЭкспресс
|
и то тут пришлось одну строчку изменить
эту
на эту
$first = strtoupper($name[0]);
|
теперь названия с большими символами и маленькими группируются вместе, но всё же почему то не все | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 19:30)
| | теперь сравните строки, которые написал я, и которые - Вы.
>если эту строку заменяю на
в этой строке точка с запятой, а не запятая.
А проблема повтора заголовков в строке с первым echo | |
|
|
|
|
|
|
|
для: Trianon
(03.10.2008 в 19:49)
| | да, я ошибся, извиняюсь, я поправил свой выше пост, посмотрите что теперь не так | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 19:56)
| | исправлений первого echo не обнаружил.
Еслит Вы пишете $first = strtoupper($name[0]);
то следует выполнять case insensitive сортировку.
А так у Вас большие буквы идут сперва, а маленькие - потом. | |
|
|
|
|
|
|
|
для: Trianon
(03.10.2008 в 20:45)
| | дауж, уже не удобно код опять показывать, вообщем вот как сейчас всё выглядит
<?php
define ("PREFIX", $db_prefix);
$conn = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name,$conn);
$sql_result = "SELECT
" . PREFIX . "data.id,
" . PREFIX . "data.description,
" . PREFIX . "data.name
FROM `" . PREFIX . "data` GROUP BY name ORDER BY name";
$result = mysql_query($sql_result);
for($letter = ''; $row = mysql_fetch_assoc($result); )
{
$id = $row['id'];
$name = $row['name'];
$first = $name[0];
if($letter != $first)
echo "<br /><h1>".htmlspecialchars($letter=$first)."</h1><br />\r\n";
echo "<a href=?id=$id>".htmlspecialchars($name)."</a><br />\r\n";
}
?>
|
а вот сам результат
...
т
т.8-905-225-86-64 Роман.
Т
Таганова Елена Георгиевна
Ф
Фарух
т
тамара
танаиф
Т
Тангента.RU
Танита
Татьяна
Татьяна Александровна
У
Украина
Т
ТИРАЖ, Александр
...
|
тут видно что список формируется не так как нужно.
Единственное как мне видеться, создать массив алфавита на русском и на английском, типа такого
$literal_arr = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
и через цикл прогнать весь этот массив, плохо только то что запросов получится столько же сколько и букв в алфавите :( | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 21:08)
| | дамп я так и не увидел.
Непохоже, что данные у Вас упорядочены по русскому алфавиту.
Поймите, для решения задачи Вам нужно научиться правильно сортировать данные запросом SQL.
Чтобы они шли нужными группами, а не абы как. | |
|
|
|
|
|
|
|
для: Trianon
(03.10.2008 в 21:24)
| | я тут проверил, оказывается у меня проблема с сортировкой, почему то мускуль не правильно сортирует, видимо поэтому и проблемы такие. При запросе
$sql_result = "SELECT * FROM `" . PREFIX . "data` ORDER BY name";
список записей можно посмотреть на скрине который я выложил на фото хостинг
http://www.imagebar.net/out.php/i27965_pageee.gif
насчёт дампа, тут я просто подключился к имеющей базе, обычная база с набитыми объявлениями, я так для проверке решил подключится к этой базе. А вообще у меня планы для автосалонов формировать этот алфавитный список.
Я тут подумал и решил немного по другому сделать, сформировать массив, где клюём будет явятся буква алфавита, а значение - записи чередюясь через разделительный знак |
[Ф] => Фарух | Фирма Профит | ФИРМА ПРОФИТ | фирма Профит | ФИРМА ПРОФИТ | Фирма Профит | Фирма Профит | Фирма Профит | Ферги |
[У] => Украина | Управляющая компания ОАО "Новая площадь" | Универсал-Спецтехника-0СПб |
[Х] => хирш | хозяйка |
[O] => OOO Логос, Михаил Берестов | OOO «ТД ТНК» | OST WEST UNION |
[P] => Plastic Technologies | Prague Discover | prava | prestig | prestig |
[R] => realtors | RJ | Russian Boat | R_J |
|
а вот сам код который формирует массив
<?php
function clear_simvol($text=''){
return trim(str_replace(array(" ","\"","'",
"`","\n","\r",".",",","-","…","!","?",":",";",
"(",")","{","}","[","]","_","=","*","|","«",
"»","+","&","<",">"),"",$text));
}
$arr_list = array();
$literal = array('А','Б','В','Г','Д','Е','Ж','З','И',
'К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц',
'Ч','Ш','Щ','Э','Ю','Я','A','B','C','D','E','F','G',
'H','I','J','K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z');
for($letter = ''; $row = mysql_fetch_assoc($result); )
{
$name = clear_simvol($row['name']);
$first = strtoupper($name[0]);
if( in_array($first,$literal) ){
$arr_list[$first] .= ''.$row['name'].' | ';
}
}
?>
|
функция clear_simvol() удаляет все не нужные символы в названии, далее строкой
if( in_array($first,$literal) ){
сверяем и выбираем только те записи у которых начальная буква слова присутствует в массиве
примерно так, сейчас у меня немного поменялись планы, решил сделать также как тут hotprice.com.ua/brands/
хочу извинится за приведённые мною большие отрывки кода, так уж получилось.. | |
|
|
|
|
|
|
|
для: web777
(03.10.2008 в 22:52)
| | Надо не извиняться, а переделать.
Элементы массива вовсе не обязаны располагаться на одной строке. | |
|
|
|
|