[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильно ли затеваю поиск по БД
GET
Здравствуйте.

Хочу спросить правильно ли затеваю поиск.

Есть несколько таблиц с одинаковыми полями. 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(*) быстрее

Спустя 9 минут, 50 секунд (23.01.2012 - 07:50) Игорь_Vasinsky написал(а):
За то при COUNT - производиться 2 операции: выборка и подсчёт кол-ва, а при mysql_num_rows - одна - возврат кол-ва.

Но на скока мне известно - да - 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 ставлю.


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.