С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268

Выбор из mysql_fetch_array();

24.07.2012, 19:28. Показов 2061. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот появился ещё такой вопрос:
Нужно при выводе результатов в $sql = mysql_fetch_array($query); мжно было объеденять рузльтаты, у которых допустим одинаковое значение в столбце artist. Получается будет выводить результаты так:
1 строка - все результаты с artist = In Flames
2 строка - все результаты с artist = All That Remains
Надеюсь понятно разъяснил суть.

Добавлено через 2 минуты
Вот мой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        $sql = mysql_fetch_array($query);
        $n = 1;
        do{
            echo "
            <li>
          <p>".$n."
          |
          <a href=\"index-8.php\" target=\"_blank\">".$sql['artist']."
          -
          ".$sql['album']."
          
          (".$sql['year'].")</a>
          |
          ".$sql['genre']."
          <br>Песня: ".$sql['song']."
 
          </p>
      </li>
            ";
            ++$n;
        }while($sql = mysql_fetch_array($query));
    }else{
        echo "Нет результатов<br>";
    }
И может как-то перед "do{" сделать условие, что если до этого уже была строка с таким же $sql['album'], то ничего не выводить.

Добавлено через 1 час 15 минут
АП! Ни у кого нет идей?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2012, 19:28
Ответы с готовыми решениями:

mysql_fetch_array
Вопрос про функцию mysql_wetch_array (не долгое гугление ни к чему не привело) $request = SELECT * FROM ... LIMIT 10 Раньше я...

mysql_fetch_array
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\attempt\reg.php on line 19 :wall: Call...

mysql_fetch_array
Подскажите как для mysql_fetch_array вернуть внутренний указатель на начала массива? пробовал через reset($array), но ничего не получилось.

13
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.07.2012, 20:45
не лучше ли это сделать средствами бд?
1.
MySQL
1
SELECT * FROM `table_name` Where `artist`='In Flames'
2.
MySQL
1
 SELECT * FROM `table_name` Where `artist`='All That Remains'
?
1
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
24.07.2012, 21:01
Создаем структуру БД, согласно сущностям: artists, genres, songs.
Формируем запрос
MySQL
1
2
3
4
5
6
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs s
INNER JOIN genres g
    ON s.genre=g.id
INNER JOIN artists a
    ON s.artist=a.id
GROUP BY artist
, выдающий следующую выборку (рис.), а уже потом поле с песнями как нибудь оформляем, чтоб все песни вывелись.

Цикл Do while в топку
Миниатюры
Выбор из mysql_fetch_array();  
1
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
24.07.2012, 21:50
кстати говоря, mysql_fetch_array() лучше заменить на mysql_fetch_assoc() или же на mysql_fetch_array(, MYSQL_ASSOC)
И Попова, кстати, тоже в топку
1
 Аватар для eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
25.07.2012, 00:04  [ТС]
Проблема в том, что это поиск на AJAX и нужно искать в БД по всем критериям. Вот весь код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    $query = mysql_query("SELECT * FROM songs WHERE artist LIKE '%$search%' OR album LIKE '%$search%' OR song LIKE '%$search%' OR year LIKE '%$search%' OR genre LIKE '%$search%'" ,$con);
    if(mysql_num_rows($query) > 0){
        $sql = mysql_fetch_array($query);
        $n = 1;
        echo "Все ссылки открываются в новой вкладке.<br>";
        do{
            echo "
            <li>
          <p>".$n."
          |
          <a href=\"index-8.php\" target=\"_blank\">".$sql['artist']."
          -
          ".$sql['album']."
          
          (".$sql['year'].")</a>
          |
          ".$sql['genre']."
          <br>Песня: ".$sql['song']."
 
          </p>
      </li>
            ";
            ++$n;
        }while($sql = mysql_fetch_array($query));
    }else{
        echo "Нет результатов<br>".mysql_error();
    }
Просто при запросе All That Remains пользователь получает вот такую картину:
HTML5
1
2
3
4
5
6
7
8
9
10
11
1 | All That Remains - The Fall Of Ideals (2006) | Metalcore
Песня: This Calling
 
2 | All That Remains - The Fall Of Ideals (2006) | Metalcore
Песня: Not Alone
 
3 | All That Remains - The Fall Of Ideals (2006) | Metalcore
Песня: It Dwels On Me
 
4 | All That Remains - The Fall Of Ideals (2006) | Metalcore
Песня: We Stand
А хотелось бы чтобы он получил в ответ:
HTML5
1
2
3
4
5
1 | All That Remains - The Fall Of Ideals (2006) | Metalcore
Песни: This Calling, Lorem, Ipsum, Dolor
 
2 | All That Remains - This Darkened Heart (2008) | Metalcore
Песня: This Darkened Heart, Lorem, Ipsum, Dolor
Может можно сделать условие такое:
PHP
1
если ($sql[album] при таком-то $sql[id] == $sql[album] при вот таком $sql[id]) { написать "бла-бла"; } else { написать нормальный код; }
0
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
25.07.2012, 01:54
Цитата Сообщение от eisenheim Посмотреть сообщение
Проблема в том, что это поиск на AJAX и нужно искать в БД по всем критериям.
В чем проблема из этого:
MySQL
1
2
3
4
5
6
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs AS s
INNER JOIN genres AS g
    ON s.genre=g.id
INNER JOIN artists AS a
    ON s.artist=a.id
GROUP BY artist
сделать
MySQL
1
2
3
4
5
6
7
8
9
10
11
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs AS s
INNER JOIN genres AS g
    ON s.genre=g.id
INNER JOIN artists AS a
    ON s.artist=a.id
WHERE artist LIKE '%$search%' OR 
      album  LIKE '%$search%' OR 
      song   LIKE '%$search%' OR 
      `year` LIKE '%$search%' OR
      genre  LIKE '%$search%'
GROUP BY artist
Цитата Сообщение от eisenheim Посмотреть сообщение
Песни: This Calling, Lorem, Ipsum, Dolor
Этого я показал каким образом можно добиться в прикрепленном скрине поста #3

Добавлено через 51 секунду
Цитата Сообщение от eisenheim Посмотреть сообщение
Может можно сделать условие такое:
этого вообще не понял
1
 Аватар для eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
25.07.2012, 11:30  [ТС]
Цитата Сообщение от Денис Н. Посмотреть сообщение
MySQL
1
2
3
4
5
6
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs AS s
INNER JOIN genres AS g
    ON s.genre=g.id
INNER JOIN artists AS a
    ON s.artist=a.id
GROUP BY artist
сделать
MySQL
1
2
3
4
5
6
7
8
9
10
11
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs AS s
INNER JOIN genres AS g
    ON s.genre=g.id
INNER JOIN artists AS a
    ON s.artist=a.id
WHERE artist LIKE '%$search%' OR 
      album  LIKE '%$search%' OR 
      song   LIKE '%$search%' OR 
      `year` LIKE '%$search%' OR
      genre  LIKE '%$search%'
GROUP BY artist
А как это оформить красиво HTML кодом?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.07.2012, 11:39
Цитата Сообщение от eisenheim Посмотреть сообщение
А как это оформить красиво HTML кодом?
что вы понимаете под этим? причем тут вообще html-код если это mysql-код?
0
 Аватар для eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
25.07.2012, 11:41  [ТС]
Спасибо! Но код был не правильным. Пришлось переделать.
Ваш код:
MySQL
1
2
3
4
5
6
7
8
9
10
11
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs AS s
INNER JOIN genres AS g
    ON s.genre=g.id
INNER JOIN artists AS a
    ON s.artist=a.id
WHERE artist LIKE '%$search%' OR 
      album  LIKE '%$search%' OR 
      song   LIKE '%$search%' OR 
      `year` LIKE '%$search%' OR
      genre  LIKE '%$search%'
GROUP BY artist
Из за вот этого:
MySQL
1
2
3
4
INNER JOIN genres AS g
    ON s.genre=g.id
INNER JOIN artists AS a
    ON s.artist=a.id
Оно искало информацию из других таблиц, которых не существует, ведь INNER берёт информацию с других БД (Вы наверное не поняли структуру моей таблицы).
А вот здесь:
MySQL
1
SELECT GROUP_CONCAT(s.song) AS song, a.artist, g.genre FROM songs AS s
Оно искало в таблице колонки не artist и genre, а искало a.artist и g.genre (а таких понятное дело не существует).
Вот получился такой код:
MySQL
1
2
3
4
5
6
7
SELECT GROUP_CONCAT(s.song) AS song, artist, album, year, id, genre FROM songs AS s
WHERE artist LIKE '%$search%' OR 
      album  LIKE '%$search%' OR 
      song   LIKE '%$search%' OR 
      `year` LIKE '%$search%' OR
      genre  LIKE '%$search%'
GROUP BY artist
Огромное спасибо! Ужас как выручили

Добавлено через 32 секунды
Цитата Сообщение от KOPOJI Посмотреть сообщение
что вы понимаете под этим? причем тут вообще html-код если это mysql-код?
То я немного.....
0
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
25.07.2012, 12:48
eisenheim,у тебя получается все в одну таблицу свалено: и песни, и артисты, и жанры, что не есть правильно, а, точнее сказать, совсем неправильно, поскольку щас пойдет практически массовое дублирование данных
0
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
25.07.2012, 20:21
Я так понял что тебе нужно выводить похожие песни и исполнителей по запросу поиска в одном флаконе.!?
Используй preg_match() с критериями совпадения нескольких вариантов и пусть mysql_query("") выводит результаты в цыкле сравнимые с вариантами отбора
0
 Аватар для eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
25.07.2012, 20:58  [ТС]
Цитата Сообщение от Programmer_ Посмотреть сообщение
Я так понял что тебе нужно выводить похожие песни и исполнителей по запросу поиска в одном флаконе.!?
Используй preg_match() с критериями совпадения нескольких вариантов и пусть mysql_query("") выводит результаты в цыкле сравнимые с вариантами отбора
Спасибо, мне уже помогли
0
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
25.07.2012, 21:45
Ну, вот я снова свободен И я решил данную задачу следующим образом:

дабы не дублировать посты, отошлю на начало, а далее оформляем простейший код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
define('HOST', 'localhost');
define('USER', 'root');
define('PASS', '');
 
mysql_connect(HOST, USER, PASS) or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
 
// в этом запросе, в отличие от третьего поста,
// добавлен новый недефолтный разделитель (SEPARATOR)
$sql = "
SELECT GROUP_CONCAT(s.song SEPARATOR ', ') AS song, a.artist, g.genre FROM songs s
INNER JOIN genres g
    ON s.genre=g.id
INNER JOIN artists a
    ON s.artist=a.id
GROUP BY artist";
 
$query = mysql_query($sql) or die(mysql_error());
 
while($row = mysql_fetch_assoc($query))
{
    echo $row['artist'].' | '. $row['genre'].'<br />';
    echo 'Песни: ' . $row['song']. '<hr />'; 
}
?>
И в итоге имеем представление, иллюстрируемое прилагаемым скриншотом.
Миниатюры
Выбор из mysql_fetch_array();  
1
 Аватар для eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
25.07.2012, 22:45  [ТС]
Спасибо, а то думал так и будет с запятыми без пробела)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2012, 22:45
Помогаю со студенческими работами здесь

for и mysql_fetch_array
Доброго времени суток. Имею конструкцию $nom_nepu = mysql_query(&quot;SELECT nomklet FROM objects&quot;); for($i=1; $i&lt;21; $i++) { ...

Mysql_fetch_array()
Всем доброго времени суток. В при при попытке авторизации выдаёт ошибку: Warning: mysql_fetch_array() expects parameter 1 to be resource,...

Warning: mysql_fetch_array()
Пытаюсь с базы вызвать пару элементов из таблицы цыклом. выдает ошибку. раньше когда делал другой сайт все было хорошо. Сверялся точка в...

Счетчик из mysql_fetch_array
Итак,с помощью mysql_fetch_array я вывожу список с базы данных.Как мне реализовать счетчик количества списков. К примеру выведен список...

Warning: mysql_fetch_array
Помогите плиз. Первый день работаю с PHP + MySQL. Не могу из URL значение достать и связать его с таблицей в MySQL. Выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru