Автор Тема: Как зделать?  (Прочитано 6369 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« : 17 Июня 2004, 22:45:52 »
Доброе время суток!


Ситуация:

Есть база, со структурой:

id - Раздел
sud_id - Буква
singer - Имя исполнителя
songs - Название композиции
links - ссылка

Идёт такой запрос:

"SELECT * FROM catalog WHERE sub_id LIKE \'А%\'"; - Тоесть брать записи начинающиеся на букву А.

Суть проблемы:

К примеру, у исполнителя "Агутин" есть несколько композицый, "Граница","Чернокожий парень", получаеться что и базе будет несколько строк с одинаковым полем singer, и при попытке вывести на страницу всех исполнителей на букву А, он выводит исполнителя "Агутин", то количество раз которое у него композицый/строк в базе данных.

Задачя:

Как зделать так чтобы если у исполнителя несколько композицый его имя выводилось всё-ровно 1 раз?


Зарание спасибо!

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как зделать?
« Ответ #1 : 17 Июня 2004, 23:58:08 »
1. читай что-нибудь по теории БД. У тебя она не нормализована. Обычно делают отдельно таблицу испольнителей и отдельно таблицу композиций.

2. БД ничего не выводит, она лишь возвращает запрошенные данные (на SELECT-запрос). Поэтому вопрос
Цитировать
-DieseLok-:
Как зделать так чтобы если у исполнителя несколько композицый его имя выводилось всё-ровно 1 раз?
имеет отношение к твоему языку программирования (пхп насколько я понимаю).
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« Ответ #2 : 18 Июня 2004, 00:10:05 »
Язык ПХП, я вот тут тоже сидел, сидел и надумал, что может так и зделать... я думал мож есть какаято фичя, я плохо разбираюсь думал мож "group by" или чёто типа этого...

Насколько я знаю в мускуле связей между таблицами нету... посему придёться в тупую сравнивать исполнителя из одной таблицы с композицией из другой :(

это типа так?:

Запрос

ispolnitel.php?id=А
   $let=$_GET[\'id\'];
   
   $connection = mysql_connect("$server", "$db_user", "$db_pass");
   $db = mysql_select_db("$database", $connection);
   $table = mysql_tablename("$table", $connection);
   $query = "SELECT * FROM singer WHERE id = \'$let\'";
   $result = mysql_query($query, $connection);
   while ($rows = mysql_fetch_array($result))
{
?>

 ">



}
?>

Получаем к примеру запрос:
kompoziciya.php?id=Агутин

   $let=$_GET[\'id\'];
   
   $connection = mysql_connect("$server", "$db_user", "$db_pass");
   $db = mysql_select_db("$database", $connection);
   $table = mysql_tablename("$table", $connection);
   $query = "SELECT * FROM songs WHERE id = \'$let\'";
   $result = mysql_query($query, $connection);
   while ($rows = mysql_fetch_array($result))
{
?>


.

}
?>

типа так?

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« Ответ #3 : 18 Июня 2004, 00:41:57 »
Впринцыпе я зделал и всё работает... всмысле с помощью двух таблиц, но всётаки... если кто знает может всётаки есть такая тема опишыте пожалуйста!!!


Спасибо!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Как зделать?
« Ответ #4 : 18 Июня 2004, 11:06:05 »
create table ispolnitel
(
ispolnitel_id int not null auto_increment,
name varchar(100),
foto varchar(100),
biografija text,
primary key (ispolnitel_id)
);

create table songs
(
songs_id int not null auto_increment,
ispolnitel_id int,
song_name varchar(255),
links varchar(255),
primary key (songs_id)
);


SELECT songs.song_name, songs.links FROM songs, ispolnitel  WHERE songs.ispolnitel_id=ispolnitel.ispolnitel_id AND ispolnitel.name LIKE \'A%\'
And no religion too...

Оффлайн Pr0Head

  • Members of GreenPeace
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://digital-market.ru
Как зделать?
« Ответ #5 : 18 Июня 2004, 11:49:23 »
Если нужно выбрать только уникальных исполнителей, то можно так:

SELECT DISTINCT (singer) FROM ....
Банк выполнил недопустимую операцию и будет закрыт!

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« Ответ #6 : 19 Июня 2004, 17:03:30 »
Добрый день!

С ентой всей "фигней" :) я разобрался, теперь ещё пару вопросов:

1. Допустим я добавил записи в базу и при выводе их не сортирую...

можноли зделать так чтобы НЕ сортируя их мне последняя запись выводилась первой ну тоесть типа как DESC но без сортировки


2. При выводе данных из базы по определённым параметрам у меня не получаеться их отсортировать.

пример:

$letter=$_GET[\'let\'];

SELECT * FROM singer WHERE name = \'$letter%\'

и если я пытаюсь присобачить в конце ORDER BY name нифига не получаетья....


3. Ышё одно :) С энтой проблемой тока-тока столкнулся...
Короче дома на апачи+мускуль зделал всё пашет...

ну тоесть структура

в таблице singer есть поля:

category - категория (русские, украинские, английские)
id - буква
name - Имя Исполнителя
link - ссылка вида: ()

и таблица songs:

id - Имя исполнителя
name - Название композицыии
link - ссылка

два файла, первый читает исполнителей на запрошенную букву со ссылкой на второй файл со списком композицый по выбраному исполнителю.

короче суть проблемы:

Издому я зделал експорт данных, а на работе Импорт, и случилось !!!ОНО!!!, короче по первой странице... ей теперь по барабану на какую букву у неё спрашивают... она лепит всех исполнителей подряд...

Прошу заметить что не менялось ничего за исключением того что дома у меня были параметра подсоединения к базе внутри каждого файла которому надо законнектиться, а на работе меня заштырило это делать и я взял инклудил один общий файл с настройка...



Помогите плз...

зарание спасибо!!!
« Последнее редактирование: 19 Июня 2004, 17:14:45 от -DieseLok- »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как зделать?
« Ответ #7 : 19 Июня 2004, 17:21:11 »
-DieseLok-
1. может ты все-таки потрудишься достать книгу по теории СУБД чтобы впредь не задавать глупых вопросов ?
Все записи в таблице неупорядочены. И сортировка по какому-то полю - единственный способ определить порядок

2. не получается только с русским языком или с английским тоже ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как зделать?
« Ответ #8 : 19 Июня 2004, 17:25:20 »
3. это проблема ПХП (возможно http://phpfaq.ru/globals )
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« Ответ #9 : 19 Июня 2004, 17:28:23 »
Макс
Цитировать
Макс:
2. не получается только с русским языком или с английским тоже ?

Чесно говоря не пробывал, но по идее если без выборки данных он сортирует русских то в любой ситуации должен сортировать, или нет?

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« Ответ #10 : 19 Июня 2004, 17:34:50 »
Макс
Начну по порядку:
register_global (мож написал не правильно), стоит на "on"

Я вывожу данные не через форму, а просто в тупую по ссылке типа singer.php?cat=ua&let=А

и при энтом выпадают записи из раздела ua НО не только на букву А

Мож это мускуль... когда я бек апил базу чёто неправильно в неё втулил?

Аааа. и ещё если это важно у !всех! ячеек в таблице (и в 1и во в 2-ой), тип TEXT
« Последнее редактирование: 19 Июня 2004, 17:43:58 от -DieseLok- »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как зделать?
« Ответ #11 : 19 Июня 2004, 17:45:02 »
это только с кирилицей такие проблемы или с латиницей тоже ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн -DieseLok-

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 178
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kyivstar.biz
Как зделать?
« Ответ #13 : 19 Июня 2004, 18:55:18 »
Макс

Вариан №1:
SELECT * FROM singers WHERE cat = \'$c\' AND id = \'$l\' ORDER BY BINARY(lower(left(id, 3)))

Вариан №2:
SELECT * FROM singers WHERE cat = \'$c\' AND id = \'$l\' ORDER BY id

Не при первом варианте не при втором не сортирует... а просто выводит данные... скодировкой всё нормально пробил по статье...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как зделать?
« Ответ #14 : 19 Июня 2004, 19:25:07 »
покажи реальный запрос, который уходит в mysql (без пхп-кода)
и первые пару строк (точнее их id) того что получил в результате
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 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 28