Няколко заявки в един код??

cHuBakA

Registered
Здравейте,

Възможно ли е следното?
Ако има 3 заявки към БД

Код:
$result=mysql_query("SELECT * FROM tablica1 WHERE id   ");
while($row=mysql_fetch_array($result)){

$result=mysql_query("SELECT * FROM tablica2 WHERE id   ");
while($row=mysql_fetch_array($result)){

$result=mysql_query("SELECT * FROM tablica3 WHEREid   ");
while($row=mysql_fetch_array($result)){

може ли да се вкарат и трите в общ код който да вади по една заявка рандом на случаен принцип?

:roll:
 
Ако ID=1 искаш да ти извади id=1 от трите таблици или как..?

Искаш да на едно място да изведе 1 ( един ) рандом резултат от трите таблици или 3 ( три ) рандом резултата по един от всяка?
 
Привет отново :)
Да, това с една заявка за 3-те таблици е ясно , но не това е целта.
- Въпроса е 3-те заявки да се съберат в един php код !?
както примерно този вади рандом по един от трите текста, така да са и трите заявки (на мястото на трите текста)
Код:
<?php
$quotes = array(
"текст1",
"текст2",
"текст3",
);
echo $quotes[rand(0, count($quotes) - 1)];
?>
Възможно ли е изобщо това ??
 
cHuBakA каза:
Привет отново :)
Да, това с една заявка за 3-те таблици е ясно , но не това е целта.
- Въпроса е 3-те заявки да се съберат в един php код !?
както примерно този вади рандом по един от трите текста, така да са и трите заявки (на мястото на трите текста)
Код:
<?php
$quotes = array(
"текст1",
"текст2",
"текст3",
);
echo $quotes[rand(0, count($quotes) - 1)];
?>
Възможно ли е изобщо това ??

Сам си отговори на въпроса:

PHP:
<?php
$queries = array(
	'SELECT * FROM tablica1 WHERE id',
	'SELECT * FROM tablica2 WHERE id',
	'SELECT * FROM tablica1 WHERE id'
);

$result = mysql_query($queries[rand(0, count($quotes) - 1]));

while($row=mysql_fetch_array($result)) {
	// Code?
}
 
Между другото така започнах и аз, но не работи.......
Иначе идеята е такава
 
[sql]SELECT * FROM (
(SELECT * FROM table1 ORDER BY RAND() LIMIT 0,1)
UNION ALL
(SELECT * FROM table2 ORDER BY RAND() LIMIT 0,1)
UNION ALL
(SELECT * FROM table3 ORDER BY RAND() LIMIT 0,1)
) AS foo ORDER BY RAND() LIMIT 0,1[/sql]
 
Решенията на @eLite и @SVTerziev се различават по вероятността, с която връщат рандом резултат.
eLite ти дава еднаква вероятност за всички таблици, независимо от броя на резултатите в тях, докато
SVTerziev ти дава рандом резултат в зависимост от броя на записите във всяка таблица - ако table1 има повече записи от table2, то по-вероятно е да дойде резултат от table1.
Трябва да решиш какво искаш, защото двете са различни по функционалност.
 
Ето по-бързо решение
PHP:
$tables = ['table1', 'table2', 'table3'];
shuffle($tables);
$query = $db->query("SELECT t.* FROM $tables[0] AS t JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM $tables[0])) AS id) AS x WHERE t.id >= x.id LIMIT 1");
 
Код:
SELECT * FROM (
    (SELECT * FROM table1)
    UNION ALL
    (SELECT * FROM table2)
    UNION ALL
    (SELECT * FROM table3)
) AS foo WHERE foo.id = ROUND(RAND()*(SELECT MAX(id) FROM foo))

Това искаш от всички таблици заедно рандом ред, а иначе погледни другите отговори ако искаш да избереш една от трите таблици и от нея вече да вземеш рандом ред
 

Back
Горе