Може ли да стане с една заявка ?

madmax_3

Registered
Здравейте

Имам таблица с приблизително следната структура:

id
key
....
други полета

Искам да взема един запис с определено id и няколко други случайни записа.

Заявка 1
$sql = "SELECT * FROM TABLE WHERE `id` = $id LIMIT 1";

Заявка 2
$sql = "SELECT * FROM TABLE WHERE `key` != $key ORDER BY RAND() LIMIT $count";

$r = mysql_query($sql) or die(mysql_error());

while ($s = mysql_fetch_assoc($r))
{ .... }

Има ли начин това да стане само с една заявка ?

Благодаря.

(Естествено в примера ще се изпълни само втората заявка)
 
А защо просто не сглобиш двете заявки в една променлива?
PHP:
sql = "SELECT * FROM TABLE WHERE `id` = $id LIMIT 1; SELECT * FROM TABLE WHERE `key` != $key ORDER BY RAND() LIMIT $count";
...
$a = 0;
while($row = musqli_fetch_assoc($query))
{
   if($a == 0){
      //тук е кода за първата заявка - тази с ID-то
      $а = 1;
   }
   else {
      //код за втората заявка - със случайните записи
   }
}
Това ще работи, но има и друг, по-удобен вариант, надявам се и той да стане:

PHP:
sql = "SELECT * FROM TABLE WHERE `id` = $id LIMIT 1; SELECT * FROM TABLE WHERE `key` != $key ORDER BY RAND() LIMIT $count";
$qyery = mysqli_query($sql);
$row = mysqli_fetch_array($query);
//код за заявката с ID-то
$row = "";
while($row = mysqli_fetch_assoc($query)){
   //код за заявката със случайните записи
}
 
Трябва всичко да се извърти в един цикъл


Ето решението:


$sql = "(SELECT * FROM TABLE WHERE `id` = $id LIMIT 1) UNION (SELECT * FROM TABLE WHERE `key` != $key ORDER BY RAND() LIMIT $count)";

Двете заявки трябва да са в скоби, иначе не работи както трябва.
 
madmax_3 каза:
Трябва всичко да се извърти в един цикъл


Ето решението:


$sql = "(SELECT * FROM TABLE WHERE `id` = $id LIMIT 1) UNION (SELECT * FROM TABLE WHERE `key` != $key ORDER BY RAND() LIMIT $count)";

Двете заявки трябва да са в скоби, иначе не работи както трябва.
Защо си усложняваш живота със скоби и union? Това е напълно достатъчно:
PHP:
$sql = "SELECT * FROM TABLE WHERE `id` = $id LIMIT 1;SELECT * FROM TABLE WHERE `key` != $key ORDER BY RAND() LIMIT $count";
 

Back
Горе