Вывод данных по алфавиту

vmnetwork

Новичок
Вывод данных по алфавиту

Требуется помощь в выводе данных по алфавиту.. в MYSQL хранится текст с заголовками, от 1 до 4х слов.. трубуется вывести только например данные начинающиеся с буквы А (в первом слове, остальные не важно), такое возможно? спасибо
 

alhaos

Новичок
select * from my_table where trim(substr(my_table.field, 1, 1 )) = 'A'

так или я чёто не так понял?
 

fixxxer

К.О.
Партнер клуба
alhaos

давай ты не будешь давать советы, пока сам чему-нибудь не научишься?

-~{}~ 08.01.10 19:39:

vmnetwork

просто like 'a%'. в этом случае будет использоваться индекс (если он есть, конечно).
 

vmnetwork

Новичок
а еще вопрос такой... например можно как то вывести отдельно весь результат который начинается с разных знаков и цифр... тоесть все кроме бьукв в одном месте?
 

vmnetwork

Новичок
только почему то глючит на некоторых буквах.. например на П и многих других выводит другие буквы ... у меня еще варианты на О выводятся:( в добавок к правильным вариантам
 

alhaos

Новичок
fixxxer

давай, тока объясни что тебе в моем запросе не понравилось.

Mols

на самом деле еще дальше в глубь.
 

vmnetwork

Новичок
а глюк то можно исправить? :(

-~{}~ 08.01.10 20:38:

Вот такой вот код получился
PHP:
<?php
@$t=$_REQUEST['t'];
?>
<a href="?section=alf&t=А">А</a>	
<a href="?section=alf&t=Б">Б 	</a>
<a href="?section=alf&t=В">В 	</a>
<a href="?section=alf&t=Г">Г 	</a>
<a href="?section=alf&t=Д">Д 	</a>
<a href="?section=alf&t=Е">Е 	</a>
<a href="?section=alf&t=Ё">Ё </a>
<a href="?section=alf&t=Ж">Ж 	</a>
<a href="?section=alf&t=З">З 	</a>
<a href="?section=alf&t=И">И 	</a>
<a href="?section=alf&t=Й">Й 	</a>
<a href="?section=alf&t=к">К 	</a>
<a href="?section=alf&t=Л">Л 	</a>
<a href="?section=alf&t=М">М </a>
<a href="?section=alf&t=Н">Н 	</a>
<a href="?section=alf&t=О">О 	</a>
<a href="?section=alf&t=П">П 	</a>
<a href="?section=alf&t=Р">Р 	</a>
<a href="?section=alf&t=С">С 	</a>
<a href="?section=alf&t=Т">Т 	</a>
<a href="?section=alf&t=У">У </a>
<a href="?section=alf&t=Ф">Ф 	</a>
<a href="?section=alf&t=Х">Х 	</a>
<a href="?section=alf&t=Ц">Ц 	</a>
<a href="?section=alf&t=Ч">Ч 	</a>
<a href="?section=alf&t=Ш">Ш 	</a>
<a href="?section=alf&t=Щ">Щ 	</a>
<a href="?section=alf&t=Ъ">Ъ </a>
<a href="?section=alf&t=Ы">Ы 	</a>
<a href="?section=alf&t=Э">Э 	</a>
<a href="?section=alf&t=Ю">Ю 	</a>
<a href="?section=alf&t=Я">Я </a>
<br><br>
<?php
$query = "select * from cat_firm where lcase(trim(cat_firm.fname)) like '$t%'";             
$result = mysql_query($query);
while ($qry = mysql_fetch_array($result)) {
print $qry['fname'];
print '<br><br>';
}
можно без параметра t, но всеравно на некоторых буквах другие варианты выдает (причем правильные тоже)....
 

alhaos

Новичок
fixxxer
Mols

Ребят вам если мой запрос не понравился с точки полноты выборки предложите свой, с точки зрения производительности тут вариант с отдельным полем и содержащим нужные данные индексом и триггером. или индексом по функции (хотя конечно все упирается в размер данных) Я конечно как то все по Oracle но думаю в MySql это тоже себя будет оправдывать.

Я не программист я DBA.

vmnetwork
А с такими глюками, стоит задуматься.
Старая индейская мудрость гласит Если ты заметил что скачешь на дохлой лошади - слезь с нее.

Дальнейшая судьба мускула в довольно в шатком положении советую обратить внимание на Oracle XE либо MSSQL Epxress Edition если еще не слишком глубоко увязли.
 

Вурдалак

Продвинутый новичок
vmnetwork

Во-первых, исправь ссылки, там должны быть только URL-кодированные значения, т.е.

<a href="?section=alf&amp;t=<?php echo urlencode("А"); ?>">А</a>

Скорее всего «глюк» именно по этой причине.

Во-вторых, тебе сказали правильный вариант запроса:
PHP:
<?php
$esc_t = mysql_real_escape_string(addcslashes($t, '_%\\'));
$query = "SELECT * FROM `cat_firm` WHERE `fname` LIKE '{$esc_t}%'";
?>
И, в-третьих, используй mysql_fetch_assoc() :)

-~{}~ 08.01.10 22:07:

&amp;

-~{}~ 08.01.10 22:08:

Почему форум преобразует последовательность символов "&", "a", "m", "p", ";" в амперсанд? Беспредел :)
 

zerkms

TDD infected
Команда форума
Я не программист я DBA.
Я конечно как то все по Oracle
вот и расскажи, что нужно сделать в оракле, чтобы при этой выборке был задействован индекс:
where lcase(trim(my_table.field)) like 'a%'
заодно расскажи, какие ассоциации у тебя возникают при упоминании термина collation.
 

phprus

Moderator
Команда форума
zerkms
вот и расскажи, что нужно сделать в оракле, чтобы при этой выборке был задействован индекс:
Функциональный индекс? Те индекс построенный по результату функции. - http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/indexes003.htm#i1006674

В PostrgeSQL к примеру есть http://www.postgresql.org/docs/8.4/static/indexes-expressional.html, которые тут должны помочь.

vmnetwork
Почитай: PHP FAQ: Проблемы с кодировкой в MySQL версий 4.1+ и PHP FAQ: \"Кавычки \". Cоставление запросов, слеши, SQL Injection

alhaos
Дальнейшая судьба мускула в довольно в шатком положении советую обратить внимание на Oracle XE либо MSSQL Epxress Edition если еще не слишком глубоко увязли.
У них слишком большие ограничения для применения где-либо в реальных проектах, а коммерческие версии дороги.
 

zerkms

TDD infected
Команда форума
Функциональный индекс? Те индекс построенный по результату функции.
phprus
спасибо, капитан :)
внимание вопрос 2: зачем делать 2 индекса (на поле и на результат вычисления), если можно сделать один?! :)))))

ps: никогда в жизни не поверю, что человек (DBA), который знает о подобных индексах (построенных на основе вычислений) - не знает что такое LIKE и как оно работает :) тут, господа, как в анекдоте о черепахах получается :))
 

phprus

Moderator
Команда форума
zerkms
Какой вопрос, такой и ответ ;-)

А вот зачем делать два индекса если можно обойтись одним и искать с помощью LIKE я не знаю. Ну может место на винте нужно забить, операции модификации данных замедлить, что-бы как-то оправдать очередное обновление железа, к примеру..
 
Сверху