В зависимости от результатов в одном цикле вывести результат в другом. Совместить.

Фанат

oncle terrible
Команда форума
Я знаю, что несложно сделать поиск по данным зхранимым в БД.
О!
молодец!
Ну, раз несложно - вот и давай, делай. поиск, сортировку, и всё остальное.

-~{}~ 25.02.06 01:51:

Но вы как всегда, я заметил после нескольких сообщений начинаете просто наезжать, непонятно зачем.
вот, блин, ламерское племя!
ПРО СЕБЯ ОН УЖЕ ЗАБЫЛ
как вылез в чужой теме с советами.
ни хрена не понимает, примитивную задачу решить не может, сам с базой данных сделать НЕ МОЖЕТ то, что другим советует - но лезет отвечать!
про это он уже забыл.
А я, оказывается - на пустом месте на невинную овечку наехал!

-~{}~ 25.02.06 01:53:

подумал эх фанат, наверно подскажет решение
фанат тебе ДВА решения подсказал.
 

Гриша К.

Новичок
О!
молодец!
Ну, раз несложно - вот и давай, делай. поиск, сортировку, и всё остальное.
...

вот, блин, ламерское племя!
ПРО СЕБЯ ОН УЖЕ ЗАБЫЛ
как вылез в чужой теме с советами.
ни хрена не понимает, примитивную задачу решить не может, сам с базой данных сделать НЕ МОЖЕТ то, что другим советует - но лезет отвечать!
про это он уже забыл.
А я, оказывается - на пустом месте на невинную овечку наехал!
...

-~{}~ 25.02.06 16:13:

Вот решил попробовать извлеч из базы данных города начинающиеся на букву 'А':
PHP:
   $query = "select DISTINCT cities.cityid, cities.cityrus, orders.pay 
             from cities left join orders
	     on cities.cityid = orders.cityid
	     where cities.countryiso = '$country' and cities.cityrus like 'А%'"
Я когда делал поиск по сайту, я делал условие, чтобы можно было вводить не меньше 3-х символов, если меньше то у меня всегда были проблемы с этим, из базы выводилось все где есть буква этот символ.

Скажите пожалуйста как корректно излеч из базы данных все слова (города) которые начинаются на букву 'А'
cities.cityrus like 'А%'"
 

Гриша К.

Новичок
Я только что заметил, чтто если в этой строке:
where cities.countryiso = '$country' and cities.cityrus like 'А%'"
убрать вот это значение cities.countryiso = '$country',
то действительно все будет выодиться.

У меня получается такое условие, что из базы данных дожны выводится те города, которые относятся к стране Россия:

$country = 'RUS'
where cities.countryiso = '$country'

и теперь я добавляю условие, что должгы извлечся только города на букву 'А'
cities.cityrus like 'А%'


Упочему-то при совмещении двух этих условий, вывод идет не верный:
cities.countryiso = '$country' and cities.cityrus like 'А%'

-~{}~ 25.02.06 16:41:

===========================

Вот при таком запросе:
$query = "select DISTINCT cities.cityid, cities.cityrus, orders.pay
from cities left join orders
on cities.cityid = orders.cityid
where cities.countryiso = 'AUT' and cities.cityrus like 'А%'"

Из базы данных у меня извлекаются два города:
- Бадгастайн
- Вена

Объясните пожалуйста, что я делаю неправильно?
 

Гриша К.

Новичок
Фанат, если вы про ссылку, http://phpclub.ru/faq/wakka.php?wak...41Rus&v=eum, то там описывается Mysql 4.1, у меня mysql на хостинег ниже 4.0 и у меня такая же.

Что же делать то?

-~{}~ 25.02.06 16:55:

Наверное мне нужно выполнить. то что написано здесь:
http://phpclub.ru/faq/wakka.php?wakka=MysqlCharset&v=1mi
 

Гриша К.

Новичок
Вот вывожу теперь города из базы данных на букву содержащуюся в переменной $letter=$_GET['letter'].
PHP:
$sql = "...
...where cities.cityrus like '$letter%'";
Вот такой пример:
-----------------------------------------------------------
_http://www/cities.php?letter=А
----------------------

// Список букв. Где все буквы в виде ссылок, кроме текущей
А Б В

// Список городов на букву А
Абаза
Абакан
Абан
Абатский
Абдулино
-----------------------------------------------------------


Вот к примеру среди городов на букву 'В', есть города для которого значение в Базе Данных в столбце 'pay' равно 'yes', т.е у меня в итоге в коде php выглядит это так $pay='yes';
и вот те города для которых $pay='yes', у меня выводятся красным цветом:
Вавож
Вагай
Вадинск
Валдай
Валуйки
Ванавара


В ИТОГЕ МНЕ НАДО, чтобы при выводе списка букв, те буквы для которых есть красные города, тоже были красного цвета, и если даже на данный момент я вывожу города на букву 'А', то буква 'В' должна быть красной:

-----------------------------------------------------------
_http://www/cities.php?letter=А
----------------------

// Список букв. Где все буквы в виде ссылок, кроме текущей.
А Б В

// Список городов на букву А
Абаза
Абакан
Абан
Абатский
Абдулино


======================
И вот теперь я незнаю как же мне сделать так.
Мне получается всеравно нужен массив из всех городов, и все возвращается к началу этого топика.
 

SelenIT

IT-лунатик :)
Гриша К.
Зачем массив городов, когда достаточно признака "наличие подсвеченных городов" у буквы?
 

Гриша К.

Новичок
SelenIT, а как мне определить эти признаки.

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

Вот непонимаю я как это сделать, запутался.
 

SelenIT

IT-лунатик :)
Имхо, достаточно выбрать "красные" города, сгруппировав их по первой букве. В выборке будут только те буквы, которые нужно "подсветить".

А города на текущую букву выбирать как обычно - другим запросом.
 

Фанат

oncle terrible
Команда форума
тебе не нужен массив всех городов.
тебе нужен массив букв, в которых встречаются проплаченные города.
 

Гриша К.

Новичок
Фанат, после того как мне ответил SelenIT, я пока ничего не делал. Спасибо за помощь.

Я вот начал пробовать извлеч из базы данных первые буквы городов, проплаченных, но ни как пойму как это сделать.

$sql ="select DISTINCT cities.cityrus ... where order.pay='yes'"

...

$result = db_result_to_array($result);

-~{}~ 01.03.06 09:07:

Я нашел такую вот функцию,

$sql ="select DISTINCT LEFT('cities.cityrus', 1) ... where order.pay='yes'"

Толи я не туда приминяю, толи вообще не то, у меня получается массив результата состоит:
А [LEFT(cities.cityrus, 1)] => А

Все таки не туда, ерунда какая-то.

-~{}~ 01.03.06 09:20:

Во, даже нашел функцию SUBSTR(строка, позиция, длина) и такую же MID? Ну что то все нето, куда их применить,
у меня жде в кратце вывод результата такой:

$sql ="select DISTINCT cities.cityrus ... where order.pay='yes'"
$result = @mysql_query($query);
...
$result = db_result_to_array($result);
 

Фанат

oncle terrible
Команда форума
все они делают одно и то же и все тебе подходят.
Учись работать с базой данных.

осваивая новые запросы, ДЕЛАЙ ЭТО В КОНСОЛИ!!!
 

Гриша К.

Новичок
Фанат, спасибо большое. Пошагово, вы меня вывели на нужный результат. И SelenIT спасибо.

С dos, я умею работать, так как начинал освоение компьютера с dos и нортона, ну вы как раз правильно говорите что бы я в них делал запросы, чтробы понять их работу.
Я через phpmyadmin, выполнял нужные мне запросы и увидел результаты.

Я неправильно использовал функцию MID, я использовал ее как substr($, 0, 1) в PHP, а надо так MID($, 1, 1) для вывода первого символа.

Вот такой запросы $sql ="select DISTINCT MID(cities.cityrus, 1, 1) ..." и такой вывод результата запроса
... $result = db_result_to_array($result);
Выдает массив букв, в данном случае без повторения.

! Замечу, что SUBSTR, в любом варианте не выполняется, выдается ошибка.


А вот дальше, при помощи циклов, я делаю вывод, в зависимости от того, чему равна $pay, которую я также извлекаю из массива результата БД:
$sql ="select DISTINCT MID(cities.cityrus, 1, 1), order.pay ...

Из-за этого, получается что при извлечении из БД букв, например если для слов на букву 'М', есть $pay = yes, = no и = NULL, буква 'М' выводится 3 раза, чтоюы она выводилась один раз и подсвечивалась, потому что $pay = yes, я сделал это при помощи двух циклов:

//Вот так вот я решаю вопрос, с тем чтобы не было повторов в запросе
$QUERY_STRING = (isset($letter)) ? eregi_replace('&letter='.$letter, '', strtolower($_SERVER['QUERY_STRING'])) : $_SERVER['QUERY_STRING'];

PHP:
// Сначала я вывожу весь список букв в одну переменную для которых $pay = 'yes'
    $row_repeat = '';
    foreach ($letter_array as $row)
        {
        if($row['pay'] == 'yes') 
    $row_repeat .= $row[0].' ';
        }

//Затем уже я вывожу буквы в зависимости от значение $pay, и если при $pay = 'yes' есть например буква М, 
//и такая же буква есть при $pay = '', то я не вывожу букву М при $pay = ''
    foreach ($letter_array as $row)
        {    
        if($row['pay'] == 'yes')
    $letter_select .= $select.' <a href="?'.$QUERY_STRING.'&letter='.strtolower($row[0]).'">'.$row[0].'</a> '."\n";

        if($row['pay'] == '' && !stristr($row_repeat, $row[0]))
    $letter_select .= $select.' <a href="?'.$QUERY_STRING.'&letter='.strtolower($row[0]).'" id="letter_select">'.$row[0].'</a> '."\n";
         }
Возможно я как-то сильно накрутил с двумя циклами, но одним у меня не получалось это решить. Если это не грубая ошибка, ну нормальный вараинт, то хорошо.

Всетаки, я могбы и с массиовом возится, который содержал 1500 городов, из-за этого кстати я не мог выводить данные на определенную букву в два столбца (никак не выходило это обработать), НО Фанат как никак вывел меня на более корректное решение, и до этого мне также так сказать оптимизировали мой код, поэтому я стораюсь всегда советоваться с корректностью и правильностью какого-либа сложного для меня кода.
 
Сверху