Реклама на сайте Advertise with us

MySQL нужна помощь

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Нераспределенный ион

С нами с 04.11.04
Сообщения: 736
Рейтинг: 475

Ссылка на сообщениеДобавлено: 17/06/11 в 10:45       Ответить с цитатойцитата 

Есть две таблицы:
`db`.`t1` и `db`.`t2`
`db`.`t1` содержит поля `id`(primary) и `status`
`db`.`t2` содержит поля `t1_id` и `data`
Надо выбрать из `db`.`t2` значения полей `data` где `t1_id` = `id` со `status` = 2 из таблицы `db`.`t1`
Можно ли это сделать одним запросом к базе?
Если можно, то как он будет выглядеть?
Не хотелось бы создавать смежную таблицу для этого, но запрос составить - тоже ничего на ум не пришло icon_sad.gif
Помогите плз.

0
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 17/06/11 в 10:57       Ответить с цитатойцитата 

Код:
select t2.data from t1,t2 where t1.id=t2.t1_id and t1.status=2;


или

Код:
select t2.data from t1 join t2 on (t2.t1_id = t1.id) WHERE t1.status=2;


оба запроса должны работать

нету у меня подписи...

5
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 17/06/11 в 11:04       Ответить с цитатойцитата 

лучше первый. эквисоединение это называется

пришел к победе коммунистического труда

5
 

Нераспределенный ион

С нами с 04.11.04
Сообщения: 736
Рейтинг: 475

Ссылка на сообщениеДобавлено: 17/06/11 в 12:08       Ответить с цитатойцитата 

Спасибо за помощь.
Кстати, вспомнил, составлял уже когда-то нечто подобное, забыл просто icon_sad.gif

0
 



С нами с 23.06.11
Сообщения: 41
Рейтинг: 7

Ссылка на сообщениеДобавлено: 23/06/11 в 22:56       Ответить с цитатойцитата 

При оптимизации сайта, а в частности запросов к базе такой способ гораздо более ресурсозатратней чем 2 простых запроса к двум таблицам. Ну по крайней мере времени затрачивается больше icon_confused.gif

...тут и сказочке Esc, кто не понял F1)

0
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 24/06/11 в 03:31       Ответить с цитатойцитата 

FXIX писал:
лучше первый. эквисоединение это называется

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

Код:
select t2.data from t1 left join t2 on (t2.t1_id = t1.id) WHERE t1.status=2;


а ну и конечно t2.t1_id должен быть индексом

1
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 24/06/11 в 12:03       Ответить с цитатойцитата 

ну спорить не буду. два запроса это два соединения с мускуль-сервером. со всеми вытекающими расходами на коннект.
соединение строк двух таблиц на основе одиного ключа - штука чрезвычайно быстрая. вся таблица не просматривается. сразу из двух столбцов выбраются соразмерные значения и строки двух таблиц склеиваются. как там оно реализовано (без промежуточной таблицы? созданием heap\merge\temporary-таблицы? я не помню. надо ман смотреть), но в любом случае быстрее чем два запроса, и потом с этим руками что-то вручную мутить уже в пхп.
ну кому как. я предпочитаю составить запрос, пусть на 10 строк, да хоть на 20. только ради того чтобы все повесить на сторону мускуля и не ебаться с этим в пхп руками.

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

пришел к победе коммунистического труда

0
 



С нами с 01.06.11
Сообщения: 96
Рейтинг: 4

Ссылка на сообщениеДобавлено: 24/06/11 в 12:24       Ответить с цитатойцитата 

PvCont писал:
При оптимизации сайта, а в частности запросов к базе такой способ гораздо более ресурсозатратней чем 2 простых запроса к двум таблицам. Ну по крайней мере времени затрачивается больше icon_confused.gif


Как раз наоборот. 1 запрос меньше ресурсозатратней чем два. Это и называется оптимизация запросов. А еще меньше времени на запрос когда индексы есть.

1
 



С нами с 23.06.11
Сообщения: 41
Рейтинг: 7

Ссылка на сообщениеДобавлено: 24/06/11 в 16:09       Ответить с цитатойцитата 

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

0
 



С нами с 01.06.11
Сообщения: 96
Рейтинг: 4

Ссылка на сообщениеДобавлено: 24/06/11 в 18:24       Ответить с цитатойцитата 



Если база Mysql небольшая то такое может быть. А если записей сотни тысяч, тогда будет результат другим. Ну и конечно смотря какие записи и запросы к базе. А то может говорим о разном.

0
 



С нами с 23.06.11
Сообщения: 41
Рейтинг: 7

Ссылка на сообщениеДобавлено: 24/06/11 в 18:33       Ответить с цитатойцитата 

Ну.. У меня была не большая.. Может и так

...тут и сказочке Esc, кто не понял F1)

-1
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 24/06/11 в 19:51       Ответить с цитатойцитата 

PvCont писал:

А про индексы вообще речи не веду


А надо бы. Что Flyman говорит - касается нормализованных баз. Там однозначно один запрос, со всеми JOIN'ами будет быстрее аналогично работающих N запросов. А так - можно сделать базу через одно место так, что на ней получатся какие угодно результаты, но только выводы будут не те, что с запросами проблема и надо их разбивать на несколько, а что база сделана через жопу. Просто многие относятся к базе так, что это типа большая свалка, в которую можно валить данные как попадет, типа экселя, ноутпада или что-то в этом духе. А там все гораздо сложнее, и правильно базу составить - это уже искусство.

2
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »