[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли записать 2 запроса одной строкой,
GET
		$gadd=mysql_query("SELECT `id2` FROM `tab1` WHERE `id`='".$a."' LIMIT 1");
$gadd_i=mysql_fetch_assoc($gadd);
$gadd2=mysql_query("SELECT `name`,`img` FROM `tab2` WHERE `id2`='".$gadd_i['id2']."' LIMIT 1");
$gadd2_i=mysql_fetch_assoc($gadd2);
echo $gadd2_i['name'];


Собственно, проще лучше? На странице этот блок встречается раз 10-15 в tab1 несколько тысяч записей, в tab2 около двух сотен.



Спустя 27 минут, 18 секунд (8.05.2012 - 08:16) sergeiss написал(а):
Ты самое главное не сказал: таблицы связаны между собой? Из написанного можно предположить, что они связаны по id2. Если так, то JOIN "тебе в руки".

Спустя 5 минут, 19 секунд (8.05.2012 - 08:21) Kuliev написал(а):
A.B.C.

$sql = "SELECT `name`,`img`
FROM `tab2`
WHERE `id2` IN('SELECT `id2` FROM `tab1` WHERE `id`='"
.$a."' LIMIT 1')";
$result = mysql_query($sql) or die(mysql_error() .'<br />'. $sql);


Как-то так можно сделать в один запрос ;)
Или как предложил sergeiss

Спустя 28 минут, 38 секунд (8.05.2012 - 08:50) TranceIT написал(а):
SELECT tab2.name, tab2.img
FROM tab1, tab2
WHERE tab1.id = tab2.id2;

Спустя 27 минут, 12 секунд (8.05.2012 - 09:17) GET написал(а):
sergeiss
,Kuliev

Сделал 3 варианта на 1000 запросов. INNER JOIN оказался самым быстрым.

TranceIT Мне кажется по твоему запросу он все совпадения вытащит, а мне надо чтоб `id`=$a;



Всем большое спасибо.

Спустя 7 минут, 52 секунды (8.05.2012 - 09:25) TranceIT написал(а):
А, ну да
SELECT tab2.name, tab2.img
FROM tab1, tab2
WHERE tab1.id = $a
AND tab1.id = tab2.id2;

Спустя 3 часа, 5 минут, 19 секунд (8.05.2012 - 12:30) inpost написал(а):
A.B.C.
А ты отключал кеширование при запросах?
Вообще в первоначальном виде 2 отдельных запроса должны быть быстрее, чем с JOIN. Но это проверять надо. Я когда соединял через LEFT JOIN по условию - то производительность падала в 2-3 раза. 4 маленьких отдельных запроса оказались быстрее.

Спустя 14 минут, 10 секунд (8.05.2012 - 12:44) GET написал(а):
inpost

"SELECT `name`,`img` FROM `tab2` INNER JOIN `tab1` ON `id`='".$a."' AND `id2`=`id` LIMIT 1"


Ну вот так 0.3 сек, а с двумя простыми 0.4 сек.

1000 запросов (не чисто в MySQL, а с кодом страницы).

Спустя 44 минуты, 41 секунда (8.05.2012 - 13:29) sergeiss написал(а):
Одно маленькое уточнения для автора темы smile.gif

Вот этот запрос
Цитата (TranceIT @ 8.05.2012 - 11:25)
SELECT tab2.name, tab2.img
FROMtab1, tab2
WHERE tab1.id = $a
AND tab1.id = tab2.id2;

тоже содержит JOIN,только в неявном (ненаписанном) виде. Называется он CROSS JOIN, который можно не писать вообще.

Спустя 4 минуты, 49 секунд (8.05.2012 - 13:34) GET написал(а):
sergeiss
Спасибо. smile.gif

Спустя 1 час, 12 минут, 6 секунд (8.05.2012 - 14:46) inpost написал(а):
A.B.C.
Что быстрее: запросить 1 кеш или запросить 2 кеша? Понятное дело 1 будет быстрее! Тестировать скорость надо на запросах без кеша.

Спустя 43 минуты, 11 секунд (8.05.2012 - 15:29) Guest написал(а):
Вариант Kuliev`a, будет самый удачный в данном вопросе. Ибо именно он сделает то что надо

Спустя 42 секунды (8.05.2012 - 15:30) Guest написал(а):
в смысле без лишних доп действий. Вложеный запрос в данном случае оправдан

Спустя 7 минут, 56 секунд (8.05.2012 - 15:38) GET написал(а):
inpost

Кэш очищается запросом RESET QUERY CACHE, потом тест...так я понимаю?

Спустя 1 час, 29 секунд (8.05.2012 - 16:38) SitnikovArtur написал(а):
>На странице этот блок встречается раз 10-15

То есть один и тот же запрос (или два) выполняется тоже 10-15 раз? Если так, то в первую очередь от этого избавиться нужно. Лезть в одну и ту же таблицу более двух раз плохо, очень плохо. Хотя может я что-то неправильно понял...


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.