Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
1

объединение запросов

17.05.2012, 15:46. Показов 1662. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
можно ли вот эти запросы объединить в один

PHP
1
2
3
if($row=mysql_fetch_array(mysql_query("SELECT word FROM table1 WHERE a='ccc' AND c=200 AND t=1 ORDER BY RAND() LIMIT 1"))) $word[1]=$row['word'];
if($row=mysql_fetch_array(mysql_query("SELECT word FROM table2 WHERE a='fff' AND c=100 ORDER BY RAND() LIMIT 1"))) $word[2]=$row['word'];
if($row=mysql_fetch_array(mysql_query("SELECT word FROM table2 WHERE a='ccc' AND c=100 ORDER BY RAND() LIMIT 1"))) $word[3]=$row['word'];
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2012, 15:46
Ответы с готовыми решениями:

Объединение запросов
Доброго дня всем! подскажите как объединить запросы SELECT count(Purchases.ID_video) FROM...

Объединение запросов
Доброго времени суток!!! Как можно объединить эти два запроса в один. USE " . $_SESSION . ";...

Объединение запросов
Здравствуйте. Имеются несколько запросов к БД: SELECT sp_struc.naz FROM queue.sp_que,...

Объединение запросов
Доброго времени суток! Помогите связать запросы. В первом считается сумма отгрузок по дням...

15
29 / 29 / 4
Регистрация: 08.12.2009
Сообщений: 106
17.05.2012, 15:52 2
UNION ALL или JOIN
1
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
17.05.2012, 16:21  [ТС] 3
Цитата Сообщение от GuardNW Посмотреть сообщение
UNION ALL или JOIN
а можно пример такового запроса к данному примеру?
смотрел JOIN но не совсем понял как им пользоваться еще, точнее как на выходе $row с разных таблиц ловить а тут еще и сразу несколько запросов...
0
29 / 29 / 4
Регистрация: 08.12.2009
Сообщений: 106
17.05.2012, 16:38 4
PHP
1
2
3
4
5
6
$i = 0;
while($row = mysql_fetch_array(mysql_query("(SELECT word FROM table1 WHERE a='ccc' AND c=200 AND t=1 ORDER BY RAND() LIMIT 1) UNION ALL (SELECT word FROM table2 WHERE a='fff' AND c=100 ORDER BY RAND() LIMIT 1)")))
{
    $word[$i]=$row['word'];
    $i++;
}
как-то так можно
1
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.05.2012, 16:01  [ТС] 5
Цитата Сообщение от GuardNW Посмотреть сообщение
как-то так можно
вроде сделал все правильно но повис сервер, точнее перед выборкой образовался вот такой запрос

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
... тут в массив записываются запросы ...
$req[$n]="SELECT w FROM test WHERE a=".$a." AND c=".$c." ORDER BY RAND() LIMIT 1";
....
.... потом объединяю в одну строку
$request="";
foreach($req as $vl){
if($vl!="") $request.="(".$vl.") UNION ";
  }
$request=substr($request,0,-6); // убираю лишний UNION
echo $request."<br>"; // проверяю визуально запрос
 
while($row=mysql_fetch_array(mysql_query($request))){
    echo $row['w']."<br>"; // выполняю запрос и смотрю результат
    }
визуально запрос выглядит так

MySQL
1
2
3
(SELECT w FROM test WHERE a=1 AND c=2 ORDER BY RAND() LIMIT 1) UNION
(SELECT w FROM test WHERE a=2 AND c=2 ORDER BY RAND() LIMIT 1) UNION
(SELECT w FROM test WHERE a=3 AND c=1 ORDER BY RAND() LIMIT 1)
вроде как положено, но это я вижу если цикл выполнения запроса не включаю , как только делаю запрос все виснет и на долго...
0
13 / 13 / 5
Регистрация: 06.12.2011
Сообщений: 50
18.05.2012, 16:05 6
MySQL
1
2
3
(SELECT w as w1 FROM test WHERE a=1 AND c=2 ORDER BY RAND() LIMIT 1) UNION
(SELECT w as w2 FROM test WHERE a=2 AND c=2 ORDER BY RAND() LIMIT 1) UNION
(SELECT w as w3 FROM test WHERE a=3 AND c=1 ORDER BY RAND() LIMIT 1)
и да это страшный запрос -
PHP
1
2
3
while($row=mysql_fetch_array(mysql_query($request))){
    echo $row['w']."<br>"; // выполняю запрос и смотрю результат
    }
насколько я понял он бесконечный сделай так -
PHP
1
2
3
4
$a = mysql_query($request);
while($row=mysql_fetch_array($a)){
    echo $row['w']."<br>"; // выполняю запрос и смотрю результат
    }
1
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.05.2012, 16:16  [ТС] 7
Цитата Сообщение от CrazyFreeMan Посмотреть сообщение
насколько я понял он бесконечный сделай так -
да теперь работает

Цитата Сообщение от CrazyFreeMan Посмотреть сообщение
и да это страшный запрос -
что именно страшное?


запрос работает и выдает нужный результат но выполнение в 2-3 раза медленнее чем теже запросы делать по отдельности с сумме, что не так?

Добавлено через 1 минуту
и вообще как правильно делать то что у меня запланировано сделать?
0
13 / 13 / 5
Регистрация: 06.12.2011
Сообщений: 50
18.05.2012, 16:33 8
Опиши что нужно сделать, потом и напишем как можно выполнить а то это история x y z
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.05.2012, 16:51  [ТС] 9
Цитата Сообщение от CrazyFreeMan Посмотреть сообщение
Опиши что нужно сделать, потом и напишем как можно выполнить а то это история x y z
мне нужно из базы рандомно выбрать несколько записей в нужный момент, тоесть перебирается массив и если есть совпадение с условием то делается запрос в базу

к примеру выглядит это так
PHP
1
2
3
4
5
6
7
8
9
10
$test="[a] [b] [s] [b] [b] [s] [a] [s]";
$arr=explode(" ",$test);
foreach($arr as $vl){
if($vl=="[s]"){
/*
... если совпадение есть то мы делаем запрос в базу и заменяем [s] на запись вытянутую из базы или в новом случае просто записываем в массив а потом из этого строим один запрос чтобы его сделать один а не после каждого совпадения делать запрос 
*/
    }
 
  }
тоесть изначально я сразу в массиве находил запись при совпадении и заменял ею шаблон но я думал что если сначала обьеденить эти записи в одну строку и сделать один запрос потом то это будет работать быстрее, но работает наоборот в несколько раз медленнее...
0
29 / 29 / 4
Регистрация: 08.12.2009
Сообщений: 106
18.05.2012, 17:09 10
тогда при совпадении нужно брать id записи, а потом на основе этого массива и выполнять общий запрос
0
13 / 13 / 5
Регистрация: 06.12.2011
Сообщений: 50
18.05.2012, 17:13 11
К сожалению я не вкурил что необходимо в задаче, дам наводку, может ты доделаешь, все что совпадает записывай в строку и потом выбирай
MySQL
1
SELECT w FROM table WHERE a in ('[s]','[b]'.....)
формируй строку - ('[s]','[n]'.....)
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.05.2012, 18:46  [ТС] 12
Цитата Сообщение от GuardNW Посмотреть сообщение
тогда при совпадении нужно брать id записи, а потом на основе этого массива и выполнять общий запрос
вы предлагаете выбирать ид записи сразу а потом по ид все записи выбирать? это то же что я делал раньше + еще один запрос...

как я и выше писал оно работает то что я делал в несколько запросов и объединив один, только почему оно медленнее работает чем несколько запросов непонятно, скорее всего я неправильно синтаксис запроса делаю...
а если еще короче то
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# - 1 вариант
if($row=mysql_fetch_array(mysql_query("SELECT w as w1 FROM test WHERE a=1 AND c=2 ORDER BY RAND() LIMIT 1"))) echo $row['w'];
if($row=mysql_fetch_array(mysql_query("SELECT w as w2 FROM test WHERE a=2 AND c=2 ORDER BY RAND() LIMIT 1"))) echo $row['w'];
if($row=mysql_fetch_array(mysql_query("SELECT w as w3 FROM test WHERE a=3 AND c=1 ORDER BY RAND() LIMIT 1"))) echo $row['w'];
 
# - 2 вариант
$request="
(SELECT w as w1 FROM test WHERE a=1 AND c=2 ORDER BY RAND() LIMIT 1) UNION
(SELECT w as w2 FROM test WHERE a=2 AND c=2 ORDER BY RAND() LIMIT 1) UNION
(SELECT w as w3 FROM test WHERE a=3 AND c=1 ORDER BY RAND() LIMIT 1)";
$r=mysql_query($request);
while($row=mysql_fetch_array($r)){
    echo $row['w']."<br>";
    }
1 вариант быстрее работает чем 2, а думал что 2й будет быстрее так как одним запросом...

Добавлено через 5 минут
Цитата Сообщение от CrazyFreeMan Посмотреть сообщение
К сожалению я не вкурил что необходимо в задаче, дам наводку, может ты доделаешь, все что совпадает записывай в строку и потом выбирай
так не получится так как на самом деле шаблоны не так выглядят [s] (эт я для простоты понимания так написал а примерно вот так [s-abs|123] - и при одработке шаблон разбивается и по 3м значениям ищется в базе рандомно подходящая замена...

не думаю что стоит вообще вникать что я делаю просто я думаю что в выше приведенных примерах нужно правильно синтаксис указать...
0
29 / 29 / 4
Регистрация: 08.12.2009
Сообщений: 106
19.05.2012, 21:09 13
можно сформировать массив состоящий из id, а потом выполнить запрос как писал CrazyFreeMan, с оператором IN

например
PHP
1
$res = mysql_query("select * from table where id in($id)");
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
19.05.2012, 22:42  [ТС] 14
Цитата Сообщение от GuardNW Посмотреть сообщение
можно сформировать массив состоящий из id, а потом выполнить запрос как писал CrazyFreeMan, с оператором IN
например
чтобы узнать ид нужных мне записей мне нужно сделать на каждый ид запрос чтобы его узнать, получается еще больше запросов...
0
29 / 29 / 4
Регистрация: 08.12.2009
Сообщений: 106
20.05.2012, 10:59 15
ну тогда попробуй условия выборки изменить

SQL
1
SELECT * FROM TABLE WHERE (a=1 AND c=2) OR (a=2 AND c=2) ORDER BY rand() LIMIT 2;
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
20.05.2012, 14:48  [ТС] 16
Цитата Сообщение от GuardNW Посмотреть сообщение
ну тогда попробуй условия выборки изменить
надо же чтобы каждому шаблону в определенном порядке соответствовало условие, попробую проще объяснить ситуацию, вот пример

это шаблон
[s-1-2] [a-2-2] [s-2-1] [a-3-9] [s-4-6]
и мне нужно чтобы в шаблонах где есть (s) были заменены с условия те что в скобках ( тоесть [s-1-2] -> a=1 AND c=2 ) ....

пока наиболее быстро работает замена сразу, тоесть выборка одной строки и сразу замена шаблона, а вот собрав в один запрос и потом заменив в определенной последовательности работает в 2-3 медленнее...

вывод оставить как есть так как обьеденение запросов в один почемуто замедляет а не убыстряет работу
0
20.05.2012, 14:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2012, 14:48
Помогаю со студенческими работами здесь

Объединение запросов
Доброго времени суток! Помогите, пожалуйста объеденить два запроса в один $query = &quot;SELECT...

Объединение 2-х запросов
Подскажите, как можно объединить 2 запроса: INSERT INTO users(player_name, messages, options,...

Объединение запросов
Здравствуйте. Столкнулась с проблемой: имеется таблица y_registrstrah, данными из этой таблицы...

Объединение запросов
Здравствуйте. Есть table1{a integer,b integer, c primaty key} 1 запрос: select a,b from table1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru