Mysql. Связанные таблицы. Ниче не пойму. - Visavi.net
https://visavi.net/
RSS - Visavi.nethttps://visavi.net/assets/img/images/logo_small.pngRSS - Visavi.net
https://visavi.net/
[email protected] (admin)[email protected] (admin)Sat, 30 Nov 2024 23:13:46 +0300Да гавнокодеры есть везде, в том числе и на самом говнокоде. Также утверждение telnet'а о том что парсер будет переносить запрос из ON в WHERE это полный бред равный нулю. Здесь вопрос больше дизайна и юзабилия кода касается. Я считаю что использование JOIN намного читабильнее и правильне, интуитивно понятнее. Я не представляю как нужно будет извращаться с запросомс "запятой", когда нужно будет объединить более 2 таблиц, а если еще типы объединения разные. Я пишу запросы в приложениях, где помиомо ещенужно обращаться к справочникам для создания сложных отчетов. Например вот один не самый сложный, но очень удачный пример где человек знающий операции JOIN легко может понять суть запроса<br>
<pre class="prettyprint">
$sql = "
SELECT
{$PRE}lab_type_research.name,
{$PRE}lab_markers.name_marker,
{$PRE}lpu.name_lpu,
{$PRE}lpu.lpu_id,
{$PRE}lab_markers_values.id_type_research,
{$PRE}lab_markers_values.marker_id,
{$PRE}lab_markers_values.`values` AS status,
count(*) AS col
FROM
{$PRE}lab_markers_values
INNER JOIN
{$PRE}lab_analyses ON {$PRE}lab_analyses.number_research = {$PRE}lab_markers_values.number_research
AND {$PRE}lab_analyses.id_type_research = {$PRE}lab_markers_values.id_type_research
AND {$PRE}lab_analyses.data BETWEEN '{$data_first}' and '{$data_second}'
{$where_lpu}
INNER JOIN
{$PRE}lab_markers ON {$PRE}lab_markers_values.marker_id = {$PRE}lab_markers.marker_id
INNER JOIN
{$PRE}lab_type_research ON {$PRE}lab_type_research.research_id = {$PRE}lab_markers_values.id_type_research
INNER JOIN
{$PRE}lpu ON {$PRE}lpu.lpu_id = {$PRE}lab_analyses.lpu_id
GROUP BY
{$PRE}lab_analyses.lpu_id,
{$PRE}lab_markers_values.id_type_research,
{$PRE}lab_markers_values.marker_id,
{$PRE}lab_markers_values.`values`
ORDER BY
{$PRE}lpu.lpu_id";
</pre>
https://visavi.net/topics/6959/183664
Mysql. Связанные таблицы. Ниче не пойму. aAliganSun, 13 Jun 2010 15:11:31 +0400Сообщенияhttps://visavi.net/topics/6959/183664Опа, а куда 4 поста стерли? Aligan ну ты в чем то прав.. Во всяком случае я разобрался где и когда надо join ставить. Хотя мне это никогда не надо было.<br>
Ps. Есть здесь нормальные кодеры.. Но большинство говнокодеры
https://visavi.net/topics/6959/183647
Mysql. Связанные таблицы. Ниче не пойму. ВалерийSun, 13 Jun 2010 14:13:12 +0400Сообщенияhttps://visavi.net/topics/6959/183647phpcoder, потому что соединить и объединить это разные вещи. Перечисление в секции FROM вообще плохой тон. в твоем запросе нельзя использовать ни левое ни правое объединение, только внутренние. <br>
Если хочешь больше критики запости запрос на сайте gavnokod.ru))))
https://visavi.net/topics/6959/183469
Mysql. Связанные таблицы. Ниче не пойму. ОлегSun, 13 Jun 2010 02:43:59 +0400Сообщенияhttps://visavi.net/topics/6959/183469<blockquote class="blockquote"><strong>Aligan</strong> (14.03.10 / 04:26)<br>
<pre class="prettyprint">
SELECT users.`*`, group.name FROM users
LEFT JOIN group ON group.id = users.group_id
WHERE id_user = $id_user
ORDER BY users.id_user
</pre></blockquote>
Вот я ниразу не пользовался командой JOIN в запросах.. Я бы написал так:<br>
<pre class="prettyprint">
SELECT users.name AS uname, group.name AS gname
FROM users,group
WHERE group.id=users.group_id
AND users.id='$id_user'
ORDER BY users.id
</pre>
Вот скажите, мой запрос чем то хуже предыдущего? Или они одинаковы?
https://visavi.net/topics/6959/183394
Mysql. Связанные таблицы. Ниче не пойму. ВалерийSun, 13 Jun 2010 00:09:11 +0400Сообщенияhttps://visavi.net/topics/6959/1833948, т.е.?
https://visavi.net/topics/6959/133676
Mysql. Связанные таблицы. Ниче не пойму. DmitryDickFri, 19 Mar 2010 17:34:44 +0300Сообщенияhttps://visavi.net/topics/6959/133676А индексы тут помогут?
https://visavi.net/topics/6959/133476
Mysql. Связанные таблицы. Ниче не пойму. MaxFri, 19 Mar 2010 09:10:01 +0300Сообщенияhttps://visavi.net/topics/6959/133476автор, ты бы структуру таблиц сменил, таблица, хранящая "Команда(в ней поля ид, ид юзера, ид группы)" и не нужна, просто добавляешь поле `group_id` в таблицу с юзерами и<br>
<pre class="prettyprint">
select `users`.*, `groups`.`title`
from `users`
left join `groups` on `groups`.`id`=`users`.`group_id`
</pre>
https://visavi.net/topics/6959/132018
Mysql. Связанные таблицы. Ниче не пойму. DmitryDickMon, 15 Mar 2010 06:39:22 +0300Сообщенияhttps://visavi.net/topics/6959/132018можно было впринципе с внешним ключом подумать
https://visavi.net/topics/6959/132016
Mysql. Связанные таблицы. Ниче не пойму. AzzidoMon, 15 Mar 2010 06:27:12 +0300Сообщенияhttps://visavi.net/topics/6959/132016Сам разобрался. Мож кому пригодится:<br>
SELECT users.*, groups.title FROM users LEFT JOIN command ON command.user=users.id LEFT JOIN groups ON groups.id = command.status<br>
Время запроса - 0.0050 сек..<br>
В отличие от 0.0015+0.0016х4+0.0016х4=0.0143 сек.<br>
З.ы. И это таблице юзеров было только 4 записи;)
https://visavi.net/topics/6959/131616
Mysql. Связанные таблицы. Ниче не пойму. SDSun, 14 Mar 2010 13:11:32 +0300Сообщенияhttps://visavi.net/topics/6959/131616<pre class="prettyprint">
SELECT users.`*`, group.name FROM users
LEFT JOIN group ON group.id = users.group_id
WHERE id_user = $id_user
ORDER BY users.id_user
</pre>
https://visavi.net/topics/6959/131530
Mysql. Связанные таблицы. Ниче не пойму. ОлегSat, 13 Mar 2010 23:26:30 +0300Сообщенияhttps://visavi.net/topics/6959/131530Дак а ты представь, если будет на странице 20 записей. 1 запрос на иды юзеров+20х1 запрос на узнавание ида группы+20х1 запрос на узнавание имени команды. Итого 41 запрос к бд. Нехило, да? Вот мне интересно, можно ли это в 1 запрос впихнуть, чтобы поле с именем из другой таблицы добавилось в результат запроса. Я так понимаю, надо юзать join, но вот вкурить его не могу..<img src="https://visavi.net/uploads/stickers/sad.gif" alt="sad">
https://visavi.net/topics/6959/131524
Mysql. Связанные таблицы. Ниче не пойму. SDSat, 13 Mar 2010 22:50:46 +0300Сообщенияhttps://visavi.net/topics/6959/1315241. <strong>Dark Person</strong>, как я понял, то тебе надо делать запрос и выводить в цикле этот айди. а с помощью него в цикле делать запрос, и уже делать вывод. ну я лично так делаю<img src="https://visavi.net/uploads/stickers/smile.gif" alt="smile">
https://visavi.net/topics/6959/131522
Mysql. Связанные таблицы. Ниче не пойму. chiperSat, 13 Mar 2010 22:45:24 +0300Сообщенияhttps://visavi.net/topics/6959/1315221) Допустим, есть три таблицы. Юзеры(поля ид, имя и.тд.), Команда(в ней поля ид, ид юзера, ид группы), Группы(ид, название, и.т.д).<br>
Задача - зная ид юзера вывести название группы.<br>
Можно сначала узнать ид группы, потом название, двумя запросами. Но если идов таких 10 или более, получается куча запросов и большое время генерации. Как это всё в один впихнуть? Чтобы, например, вывести всех юзеров(не все есть в таблице команда) и рядом с ними вывести название группы.<br>
2) допустим - гостевая. Та же ситуация, что и выше. Куча записей и надо вывести рядом с ником названия групп.<br>
И, объясните, кто-нибудь про связанные таблицы вообще. Первичный ключ итд. Или линк подкиньте. Заранее спасибо.
https://visavi.net/topics/6959/131519
Mysql. Связанные таблицы. Ниче не пойму. SDSat, 13 Mar 2010 22:40:46 +0300Сообщенияhttps://visavi.net/topics/6959/131519