Вопрос по организации данных в MySql

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: shulga
Тогда ответ профессионалу- я не считаю, что MySQL- "черный ящик" и будет делать то, что вы просите. Да, будет, но сколько времени это займет? Не знаю как ваша, но моя практика обработки баз данных показала, что оптимизация никогда не бывает вредной.
Надо сначала доказать, что речь именно об оптимизации, а не наоборот, ага?

Вопрос практический- пусть человек попробует. Да и заодно купит КНИГУ. Хотябы Лаура Томсон, Люк Веллинг - "Разработка приложений на PHP MySQL".
Надеюсь такие КНИГИ (если там подобные вышеприведённому советы) сразу в рулонах издают, для удобства чтения?.. А бумага мягкая?..
 

.des.

Поставил пиво кому надо ;-)
Тогда ответ профессионалу- я не считаю, что MySQL- "черный ящик" и будет делать то, что вы просите. Да, будет, но сколько времени это займет? Не знаю как ваша, но моя практика обработки баз данных показала, что оптимизация никогда не бывает вредной. Вопрос практический- пусть человек попробует.
Если это к тому, что приведенная Вами схема это оптимизация, то у меня больше нет ни вопросов к вам как "профессионалу", ни комментариев к вашим замечаниям.


Да и заодно купит КНИГУ. Хотябы Лаура Томсон, Люк Веллинг - "Разработка приложений на PHP MySQL".
Если в этой книге такие примеры, то как раз наоборот такое чтиво надо обходить.

P.S. Попробуйте поработать с таблицей больше чем 100 записей. Скажем, начните с 1 000 000 (можете начать даже 50 000).
 

REMO

Guest
Решил попробовать сделать связь один ко многим (все таки многие ко многим можно избежать), но возник вопрос...

Как сделать запрос?

Допустим есть только первая таблица и вторая (связка), а третья таблица, с именами девушек будем считать забита в массив php... (только не кляните извращенцем, экспериментатор ) :)

Как будет выглядеть запрос с данными васи и с кем спал Vasya... (одним запросом)

SELSECT * FROM male, fucked WHERE male_name.male = 'Vasya' AND male_id.male = male_id.fucked;

Но если Вася спал с десятью, то запрос получиться кривой... Т.е. как массив вытащить, из 10 васиных female_id? Или его по другому как отдельным запросом не вытащиш?

Сорри, что так длинно :)
 

Falc

Новичок
REMO
>>Но если Вася спал с десятью, то запрос получиться кривой... Т.е. как массив вытащить, из 10 васиных female_id? Или его по другому как отдельным запросом не вытащиш?

Чем он у тебя будет кривой?
Он вытащит тебе твои id'шники.

>>третья таблица, с именами девушек будем считать забита в массив php...

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

REMO

Guest
ок, понял, данные мешать не буду, буду делать третью таблицу....

кривой будет тем, что я не понимаю как я данные буду вытаскивать....

$r = mysql_query("...");
$row = mysql_fetch_array($r);

и какой индекс (какие индексы) мне использовать в $row["???"], чтобы достать 10 айди девушек?
 

REMO

Guest
Прочитал, но что то это не навело меня на мысль как сделать то, что у меня не получается... ((

Я делаю запрос у меня mysql_num_rows равно количеству записей в таблице связке, т.е. получается он выдает каждую новую девушку Васи, как отдельную строку в запросе...

Получается, если мы хотим узнать со сколькими девушками переспал Vasya, то запрос

SELECT * FROM male, fucked WHERE male_name.male = 'Vasya' AND male_id.male = male_id.fucked;

выдаст нам несколько строк, при использовании mysql_fetch_array, и если мы будем спрашивать не только о Васе, а еще и о Пете, то при выводе придется смотреть чья это строка запроса, все еще Васина, или уже Петина... Это как то несколько все усложняет ((

Может я чего то опять не догнал, не может быть чтоб это делалось так сложно???
 

Falc

Новичок
REMO
>>Это как то несколько все усложняет

Обычно это все упрощает.
 

REMO

Guest
Автор оригинала: Falc
REMO
>>Это как то несколько все усложняет

Обычно это все упрощает.
Вот я и хочу понять, где я ошибаюсь, что у меня все так сложно... :)
Приходится все время проверять чья это строчка запроса, Васи или уже следующего человека, разве это упрощение?
 

fixxxer

К.О.
Партнер клуба
Вот тебе примеры запросов:
- Скольких баб кто имел?
- Кто имел меньше чем трех?

В случае с тремя таблицами это всё - один запрос. А во что это выльется с твоей "структурой"?

...

Если ты делаешь выборку по Васе, то "следующего человека" там не будет. Если по всем - так отсортируй по male.id. Или группируй, в зависимости от задачи.
 

REMO

Guest
2fixxxer

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

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

fixxxer

К.О.
Партнер клуба
А в чем проблема непонятно :) вроде так удобнее даже.
на конкретном примере спроси.
 

REMO

Guest
сейчас у меня все в одной таблице, т.е.

male_id | name | Sveta | Olya ....

(прошу учесть, что свет и оль макс 20 человек, т.е. 20 столбцов), если такой то пересекался с девушкой, то ему пишем 1 в соотв столбец, если не пересекался, то 0... И у меня все выходит одной строчкой, т.е. я делаю запрос с кем спали Вася и Петя, и получаю 2 строки в запросе....

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

Что я получаю? Безусловно, более гибкую структуру хранения данных, но более корявый, на мой взгляд, способ вывода данных...

Возникает вопрос, стоит ли он того?

Не знаю насколько конкретен этот пример, но другого пока не придумал...
 

Nime

Guest
В чём корявость-то? Даёшь пример конкретный :)
 

REMO

Guest
даю :)

попробвал все это реализовать и нарвался на следующее. Возможно из-за того, что мы рассматриваем пример с Васями и Олями, может поэтому такой вывод и не кажется корявым... Предположим, что Оли и Светы сменились, умениями Васей и Петь. Т.е. в третьей таблице, не Оля, Света, а водопроводчик, летчик и детей заводчик.

Надо вывести данные Васи и где то между этих данных то, что он умеет. Получается, что в запросе мы имеем несколько строк. Перед тем как вывести имя Васи, мы сделаем mysql_fetch_array в $row, и выведем имя, дату рождения и тд. Далее, нужно вывести его умения. Делаем while($row = mysql_fetch_array(..)) и выводим в цикле его умения. А вот теперь, чтоб нам продолжить вывод данных Васи, его краткой биографии, юношеских подвигов и прочего, надо двигаться в массиве запроса назад...

Ну разве это не называется коряво?

Короче я в замешательстве, хочется сделать структуру данных грамотную, но получается, что с выводом приходится поизвращаться... А при красиво сделанном выводе, страдает структура данных :)
 

Nime

Guest
Может я что-то не углядел из предыдущих постов, но общая схема такая.

Одним запросом вытаскиваешь все данные Васи из нужной таблицы и сохраняешь его в массиве.

Что хочешь выводишь, используя массив.

Другим запросом из другой таблицы получаешь умения. Выводишь.

Используя первый массив, выводишь всё остальное.
 

REMO

Guest
Автор оригинала: Nime
Может я что-то не углядел из предыдущих постов, но общая схема такая.

Одним запросом вытаскиваешь все данные Васи из нужной таблицы и сохраняешь его в массиве.

Что хочешь выводишь, используя массив.

Другим запросом из другой таблицы получаешь умения. Выводишь.

Используя первый массив, выводишь всё остальное.
То то и оно, что получается, что запросов 2, а не один... 2-мя запросами я и без массива выведу... А вот одним получается гемморой...

Я может глупость спрошу, но что лучше гибкая структура данных и удвоение количества запросов. Или "не совсем правильная" структура и маленькое количество запросов?
 

Nime

Guest
Ты можешь получить одним запросом то же самое, что и с предыдущей таблицей, но в данном случае оно тебе не надо. Есил я правильно понял, что ты делаешь, конечно.

Хотя, я кажется понял, что я тебя неправильно понял... :) Ты не конкретно для Васи ищешь...

Покажи таблицы какие у тебя сейчас есть - тебе нужен join просто.
 

REMO

Guest
table1

male_id | name | age | ... т.д.

table2

male_id | umenie_id

table3

umenie_id | umenie_nazvanie
 

chira

Новичок
для твоего случая лучше "лучше гибкая структура данных и удвоение количества запросов"

если ты хранишь в таблице все 20 характеристик (умений) Васи, получается что ты сохраняешь как умения (1) так и не умения (0). Сколько записей планируестя в таблице?
Говоря об удобстве вывода, ты думаешь о себе, подумай о тех кто будет работать с твоей программой ...

-~{}~ 05.04.04 21:42:

похоже начинает доходить ...
 
Сверху