Хочу спросить правильно ли затеваю поиск.
Есть несколько таблиц с одинаковыми полями. SELECT COUNT(*) - нужен для пейджер навигатора и определения наличия строк в этой таблице
по одним запрос будет такого вида:
$sql=array();$count=0;
if ($a==1)
{
$ts=mysql_query("SELECT COUNT(*) FROM `".$tb."` WHERE `ps`='".$ps."'");
$ts_i=mysql_fetch_row($ts);
if ($ts_i[0]>0)
{
$count=$count+$ts_i[0];
$sql=$sql." SELECT `id`,`login`FROM `".$tb."` WHERE `ps`='".$ps."'";
}
}
else
{
$ts=mysql_query("SELECT COUNT(*) FROM `".$tb."` WHERE `ps`='".$ps."' AND `m`='1'");
$ts_i=mysql_fetch_row($ts);
if ($ts_i[0]>0)
{
$count=$count+$ts_i[0];
$sql=$sql." SELECT `id`,`login`FROM `".$tb."` WHERE `ps`='".$ps."' AND `m`='1'";
}
}
собираем данные из массива $sql (специально полные запросы прописал) объединяя элементы массива UNION, составляем обобщенный запрос типа
SELECT `idt`,`login` FROM `tb1` WHERE `m`='2' AND `ps`='3' UNION ALL SELECT `idt`,`login` FROM `tb2` WHERE AND `ps`='3' UNION ALL
//... и т.д. в конце LIMIT(10,20)
Вывод в браузер таблицы.
Правильная ли логика?
Спустя 1 час, 26 минут, 46 секунд (23.01.2012 - 07:36) NitroGenerate написал(а):
А не проще наличие строк и их количество в базе определить функцией mysql_num_rows ?
Спустя 4 минуты, 27 секунд (23.01.2012 - 07:40) GET написал(а):
NitroGenerate
нет COUNT(*) быстрее
нет COUNT(*) быстрее
Спустя 9 минут, 50 секунд (23.01.2012 - 07:50) Игорь_Vasinsky написал(а):
За то при COUNT - производиться 2 операции: выборка и подсчёт кол-ва, а при mysql_num_rows - одна - возврат кол-ва.
Но на скока мне известно - да - COUNT быстрее.
Но на скока мне известно - да - COUNT быстрее.
Спустя 6 минут, 28 секунд (23.01.2012 - 07:56) GET написал(а):
Игорь_Vasinsky
Не могу сообразить почему обобщенный запрос
Не могу сообразить почему обобщенный запрос
Цитата |
SELECT `idt`,`login` FROM `tb1` WHERE `m`='2' AND `ps`='3' UNION ALL SELECT `idt`,`login` FROM `tb2` WHERE AND `ps`='3' UNION ALL //... и т.д. в конце LIMIT(10,20) |
правильно работает :) т.е.
таблиц то несколько, но
$s=mysql_query("ZAPROS");
while($s_i=mysql_fetch_assoc($s))
{
echo $s_i['login'];// Отображается правильно
}
Как узнает из какой таблицы брать поле login?
т.е. не писал AS 'name' а все почему-то работает...
Спустя 14 минут, 48 секунд (23.01.2012 - 08:11) Игорь_Vasinsky написал(а):
незнаю... может указать как table.login без ``
Спустя 33 минуты, 43 секунды (23.01.2012 - 08:45) asokol написал(а):
Попробуйте упростить код в первом посте до:
$sql=array();
if ($a==1) $sql[] = "SELECT `id`,`login`FROM `{$tb}` WHERE `ps`='{$ps}'";
else $sql[] = "SELECT `id`,`login`FROM `{$tb}` WHERE `ps`='{$ps}' AND `m`='1'";
...
$sql = implode(' UNION ALL ', $sql);
$result = mysql_query($sql);
$count = mysql_num_rows($result);
Цитата |
Как узнает из какой таблицы брать поле login? |
Есть несколько запросов, которые объединены в один с помощью UNION. В каждом из этих запросов указана таблица, из которой берутся значения.
Спустя 7 минут, 20 секунд (23.01.2012 - 08:52) GET написал(а):
asokol
я специально полную версию написал (чтоб объяснить для чего делаю) на самом деле там только $tb в массив уходит, а уже когда foreach'em собираю там UNION ALL ставлю.
я специально полную версию написал (чтоб объяснить для чего делаю) на самом деле там только $tb в массив уходит, а уже когда foreach'em собираю там UNION ALL ставлю.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.