[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Записать в массив таблицу из бд, вывести его
Страницы: 1, 2
kav1
Здравствуйте. Вот есть у меня такой запрос:

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM base WHERE bird LIKE '$bird%' ";


В базе base есть таблица bird, в ней названия птиц.

Мне надо записать всю выборку птиц в массив, затем у всех элементов этого массива оставить только первые две буквы (допустим, вместо "синица" должно остаться "си" и т.д.), затем убрать дубликаты и вывести все неповторяющиеся двухбуквенные значения. То есть в итоге должно получиться что-то вроде:

Аб
Ви
Си
....

Вот я начал это дело, но дальше чем :

$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
$ptichka[] = $row['bird'];


не продвинулся, ибо print_r($ptichka) выводит мне какой-то бред. Помогите что ли)
Игорь_Vasinsky
$res = mysql_query($sql);

if($res === false){
echo mysql_error();
}
else{
if(mysql_num_rows($res) == 0){
echo 'empty data';
}
else{
while($row=mysql_fetch_assoc($res)){
//каждый цикл - одна строка = 1 набор полей
var_dump($res);
}
}
}




_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kav1
Спасибо, Игорь, что откликнулись. Насколько я понимаю, var_dump($res) должна вывести список массива на экран (поправьте, если ошибаюсь), но вот что у меня в итоге выводится:

resource(3) of type (mysql result) resource(3) of type (mysql result) resource(3) ... (и так много раз)
Игорь_Vasinsky
Цитата
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM base WHERE bird LIKE '$bird%' ";


кол-во строк нужно или содержание ?

$sql = "select right(bird,2) from base";

if($res === false){
echo mysql_error();
}
else{
if(mysql_num_rows($res) == 0){
echo 'empty data';
}
else{
while($row=mysql_fetch_assoc($res)){
$list[] = $row['bird'];
}
}
}


var_dump($list);


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kav1
Необходимо содержание, да, исправил запрос на
$sql = "select right(bird,2) from base";


и после чего влепил ваш код, теперь вот что выводится:


array(1287) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL [10]=> NULL [11]=> NULL [12].....и так далее
kav1
Всё нормально, заменил
$sql = "select right(bird,2) from base";
на
$sql = "select left(bird,2) from base";
и теперь выводится нормальный массив))

Но он в виде:
array(1287) { [0]=> string(2) "Ма" [1]=> string(2) "Си" [2]=>


А как сделать, чтобы на экране было:

<a href="#">Ма</a>
<a
href="#">Си</a>
...
Игорь_Vasinsky
аа))) ну да left же ))) аахахха


$sql = "select left(bird,2) from base";

if($res === false){
echo mysql_error();
}
else{
if(mysql_num_rows($res) == 0){
echo 'empty data';
}
else{
while($row=mysql_fetch_assoc($res)){
$list[] = $row['bird'];
}
}
}


if(isset($list){
foreach($list as $v)
echo $v.'<br/>';
}



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kav1
Есть такое дело))) вроде работает, вот еще последний нюанс,
$list[] = $row['bird'];
дает список всех птичек, в массиве есть повторяющиеся элементы (например слово сорока указано несколько раз), как притулить сюда array_unique? Конструкция

 $list[] = array_unique($row['bird']);


не хочет работать...
Valick
Цитата
не хочет работать...

и не будет, если интересно почему, то надо немного книжек почитать.

if(isset($list){
$list = array_unique($list);
foreach($list as $v)
echo $v.'<br/>';
}

__
$sql = "SELECT DISTINCT LEFT(`bird`,2) FROM `base`";


_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
можно так

$list[$row['bird']] = $row['bird'];


а можно так
$sql = "select distinct left(bird,2) from base";


и так тоже можно

if(isset($list){
array_unique($list);

foreach($list as $v)
echo $v.'<br/>';
}


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kav1
Valick, спасибо за отклик, но мне надо именно после выборки уже сделать отброс неуникальных значений. То есть уже после того, как у нас по две буквы осталось.
Valick
Цитата
но мне надо именно после выборки уже сделать отброс неуникальных значений

этому есть какое-то логическое обоснование? зечем что-то отбрасывать, если можно сразу выбрать уникальные значения?

_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
если это можно сделать средствами БД - то и делать стоит это средствами БД

другое дело если слова будут в разном регистре - то мне кажется это делать на стороне сервера приложений.

а так - distinct - очень даже подходит.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kav1
Цитата (Valick @ 25.03.2014 - 11:39)
Цитата
но мне надо именно после выборки уже сделать отброс неуникальных значений

этому есть какое-то логическое обоснование? зечем что-то отбрасывать, если можно сразу выбрать уникальные значения?

ну вот такой я не логичный))
kav1
Игорь, подошел ваш 1ый вариант решения. Благодарю и всячески плюсую
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.