LINUX.ORG.RU

Подстановка значения в SQL запрос

 , ,


0

1

Есть такой кусок кода:

$result1 = mysql_query("SELECT id,a,b FROM $table1");
while ($row1 = mysql_fetch_array($result1)) 
{
$coord1 = mysql_query("SELECT lat,lng FROM $table2 where id in (select first_id from $table1 where link_id=2)");
$row2 = mysql_fetch_array($coord1);
echo "Номер ".$row1['id'].": ";
};
Как во второй SQL-запрос подставить текущий id из цикла вместо «2» в «link_id=»? Спасибо.



Последнее исправление: kraleksandr (всего исправлений: 1)

SELECT T1.id
,T1.a
,T1.b
,(SELECT T2.lat FROM $table2 as T2 where T2.id=T1.link_id) as lat
,(SELECT T2.lng FROM $table2 as T2 where T2.id=T1.link_id) as lng
FROM $table1 as T1

И не заниматься фигней.

anonymous
()

Ниже комментаторы уже все ответили, от себя лишь дам добрый совет: Забудь mysql_* функции и никогда не используй их в реальном проекте.

anthill
()
Ответ на: комментарий от RR

Лень было заниматься фигней и вспоминать JOIN синтаксис для mysql, который один фиг с этими join-ами работает ахово

anonymous
()
Ответ на: комментарий от anonymous

[qoute]

,(SELECT T2.lat FROM $table2 as T2 where T2.id=T1.link_id) as lat
,(SELECT T2.lng FROM $table2 as T2 where T2.id=T1.link_id) as lng
Мне вот интересно, в sql, что нельзя объявить алиас для этого вложенного запроса, или всем придется делать два селекта на каждую строчку?

Deleted
()
Ответ на: комментарий от Deleted

оптимизатор мускула (емнип) такие вложенные запросы разворачивает в join

select 
	t1.id, 
	t1.a, 
	t1.b,
	t2.lat,
	t2.lng 
from 
	$table1 t1
join $table2 t2 on t2.link_id = t1.id

RR
()
Ответ на: комментарий от RR

оптимизатор мускула (емнип) такие вложенные запросы разворачивает в join

Тогда зачем так писать?

Deleted
()
Ответ на: комментарий от Deleted

так тож анонимные знатоки

Лень было заниматься фигней и вспоминать JOIN синтаксис для mysql, который один фиг с этими join-ами работает ахово

сам не знает, а советует

RR
()
Ответ на: комментарий от RR

Ну дык пишет же что join - плохо работает.

А как поместить в where условие с join таблицей?

например чтобы выбрать только записи из table2 которых с таким t2.link_id больше одного? (дублируются тобишь)

Deleted
()
Ответ на: комментарий от gatsu

ну тогдаж будет подзапрос на каждую запись основной таблицы!

Deleted
()
Ответ на: комментарий от Deleted

Можно, через join. Если ставить перед собой такую цель.

Я же преследовал цель показать что крутит цикл по БД средствами php не обязательно не менее чем полностью

anonymous
()
Ответ на: комментарий от RR

Планировщик в mysql что ? Реально такой больной на голову ?

Заменяет выборку значения по ключу, на перемножение таблиц

anonymous
()
Ответ на: комментарий от RR

Увы знает. К примеру то что аналогом моего запроса будет не простой JOIN, а тот который LEFT

anonymous
()
Ответ на: комментарий от goingUp
select t1.id, t1.a, t1.b, t2.lat, t2.lng 
from $table1 t1 
join $table2 t2 on t2.link_id = t1.id
where exists (select t3.id from $table2 t3 where t3.link_id=t2.link_id and t3.id<>t2.id)

IMXO IN (подзапрос) во всех РСУБД гораздо тяжелей EXISTS

anonymous
()
Ответ на: комментарий от anonymous

Каждый конкретный запрос с join'ом надо прогонять через explain и смотреть что и куда он там хочет. Они щас в последних версиях серьезно докрутили планировщик. Правда я юзаю сборку с патчами от перконы, а не ванильный оракловый мускуль.

boombick ★★★★★
()
Ответ на: комментарий от Deleted

Этот запрос довольно простой и должен интерпретироваться так:

1. SELECT в WHERE;

2. Основной SELECT;

3. Присоединение колонок из другой таблицы (для всех полей сразу).

Вот если данные из присоединяемой таблицы будут использоваться в запросе (например, во WHERE), то движок SQL будет вынужден лезть в неё для каждой строки (и зависимость времени выполнения от количества строк будет линейной), это можно поправить покрытием индексами нужных колонок.

gatsu
()
Последнее исправление: gatsu (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.