Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вложеные запросы?
 
 автор: korwin   (10.02.2005 в 21:52)   письмо автору
 
 

есть ли в MySQL вложеные запросы(или какой-нибудь их эквивалент). Желательно пример :)

   
 
 автор: cheops   (10.02.2005 в 22:11)   письмо автору
 
   для: korwin   (10.02.2005 в 21:52)
 

Полноценной поддержки до версии 4.1 не было, сейчас вроде как есть, но это нигде толком ещё не описано, да и новые версии ведут себя как-то подозрительно - их многие избегают.
В версиях младше 4.1 вложенные запросы поддерживаются только частично, пожалуй единственный пример который приходит на ум - это вложенный запрос при при вставки в таблицу данных из другой таблицы
INSERT tbl1 SELECT * FROM tbl2

   
 
 автор: korwin   (11.02.2005 в 02:23)   письмо автору
 
   для: cheops   (10.02.2005 в 22:11)
 

Я имел ввиду запросы типа 'содержится ли данные вдругом наборе данных, взятых посредством другого запроса'
И еще можно ли как-нибудь в этом плане использовать массивы?

   
 
 автор: cheops   (11.02.2005 в 07:38)   письмо автору
 
   для: korwin   (11.02.2005 в 02:23)
 

Нет, к сожалению, версии до 4.1 не поддерживают эту особенность, а про выше 4.1 я сказать что-то определённое пока не могу. Обычно, при использовании MySQL в таких случаях прибегают к оператору IN:
SELECT * FROM tbl WHERE id IN (1,4,6,7,8,9,11,14,67,190)

Массив в круглых скобках, на месте которого в других базах данных обычно стоит вложенный запрос подставляют переменную, которую динамически формируют в цикле средствами внешнего языка (PHP) при выборке данных из другого SQL-запроса.

   
 
 автор: korwin   (11.02.2005 в 13:53)   письмо автору
 
   для: cheops   (11.02.2005 в 07:38)
 

Спасибо, про IN я не додумался посмотреть.
При такам раскладе не самый худший вариант :)

   
 
 автор: RV   (16.10.2005 в 07:52)   письмо автору
 
   для: korwin   (11.02.2005 в 13:53)
 

есть 4 запроса:

$q1 =mysql_query("SELECT page_title FROM pages WHERE page_id = '$first'");
$q2 = mysql_query("SELECT page_title FROM pages WHERE page_id = '$second'");
$q3 = mysql_query("SELECT page_title FROM pages WHERE page_id = '$third'");
$q4 = mysql_query("SELECT page_title FROM pages WHERE page_id = '$fourth'");

можно (нужно?) ли их объеденить в один? и если можно, то как потом доставать результаты?

   
 
 автор: napTu3aH   (16.10.2005 в 09:32)   письмо автору
 
   для: RV   (16.10.2005 в 07:52)
 

Конечно же можно, тем же способом, который описывал Хеопс. А доставать теми же функциями пхп, что и раньше, просто в результате выполнения запроса у вас будет не одна строка, а 4. :-)

SELECT page_title FROM pages WHERE page_id IN ('$first', '$second', '$third', '$fourth')

   
 
 автор: RV   (16.10.2005 в 09:41)   письмо автору
 
   для: napTu3aH   (16.10.2005 в 09:32)
 

а какими функциями что и раньше :) ?

$q = "SELECT page_title FROM pages WHERE page_id IN ('$first', '$second', '$third')";
$request = mysql_query($q) or die(mysql_error());
$result = mysql_fetch_array($request);

и в переменной $result у меня массив только из $first

   
 
 автор: napTu3aH   (16.10.2005 в 10:01)   письмо автору
 
   для: RV   (16.10.2005 в 09:41)
 

Просто пропустить функцию "mysql_fetch_array" через цикл

for($i=0; $i<$mysql_num_rows($request); $i++)
{
$result = mysql_fetch_array($request);
echo $result;
}

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования