Обьединение таблиц

Печать RSS
200

Автор
Пацак
0
Привет всем)
У меня неожиданно возникла запара. Дело в том, что у меня есть 2 таблицы. 1 - таблица гостей, 2 - таблица забанённых гостей. Пишу скрипт который выводит гостей по категориям.
1. all - выводит всех гостей
2. b - выводит гостей забанённых по IP
3. n - выводит законопослушных гостей
Я бы могла создать несколько страниц, в которой было бы по отдельному запросу к нужной на момент использования таблице. Но такой подход мне не особо нравится.
Потому я пошла как говорится, другим путём.
		<?php
			$sql = '';
			$sql.= "SELECT * FROM `ac_guest`, `ac_guest_ban` ";
			 # Все гости
			if($cat == 'b')
			 $sql.= "WHERE `ac_guest`.`id` = `ac_guest`.`id_user`";
			 # Забанённые по ip
			elseif($cat == 'n')
			 $sql.= "WHERE `ac_guest`.`id` <> `ac_guest`.`id_user` ";
			 # Не нарушавшие гости
			$sql.= "GROUP BY `ip` ";
			 # Только уникальные IP
		?>
	
Но суть сего сказания заключается в том, что пока в таблице `ac_guest_ban` (забанённіе по IP) хотя бы одна запись - скрипт не возвращает ни одного результата.
Как решить данную задачу - неиму. Если кто в курсе как, мне справится с этим - пожалуйста подскажите. За ранее Вам благодарна, с уважением Яsmile
PS
Во избежания тупорылых постов "Гугл тебе в помощ" и тд и тп, отвечу так - трафа меня нет и скорость 320 кбит/сек
Изменил: Erika (22.03.2013 / 18:38)
Автор
Пацак
0
		<?php
			$sql = '';
			$sql.= "SELECT * FROM `ac_guest`, `ac_guest_ban` ";
			 # Все гости
			if($cat == 'b')
			 $sql.= "WHERE `ac_guest`.`id` = `ac_guest_ban`.`id_user`";
			 # Забанённые по ip
			elseif($cat == 'n')
			 $sql.= "WHERE `ac_guest`.`id` <> `ac_guest_ban`.`id_user` ";
			 # Не нарушавшие гости
			$sql.= "GROUP BY `ip` ";
			 # Только уникальные IP
		?>
	
Прошу прощения, премер выше не катит. В этом посте реально правильный пример. Что в нём не так, подскажите кто в курсе...

Чатланин
0
Не проще уж прописать полные запросы? не вижу смысла в этой мозаике
Автор
Пацак
0
3. shilo, что ты имеешь в виду?
Проще никак не получится. Я же ранее уже говорила, что в принципе можно создать три страницы одного раздела но мне это не с руки. Хотелось бы все вместить в одно предложение.
Во первых это меньше кода, а значить и головняка лишнего нет. Во вторых SQL дуплится на много шустрее php. По этому все, что можно решить с помощью SQL лучше всего именно так и решать. При большом потоке посетителей меньше вероятности, что движок начнет тупить, а у меня он достаточно тяжелый. Меньше нагрузки всегда лучше.
П

Пацак
0
Во-первых, смысла в разбиении SQL запросов нет. Это "экономия на спичках", с другой стороны, разбираться в таком коде несколько сложнее. Во-вторых, запросы из нескольких таблиц работают следующим образом - можно сказать, "первоначально" возвращаются все возможные комбинации из записей обеих таблиц. Поэтому, третий тип запроса должен быть примерно таким:
SELECT * FROM `ac_guest` 
LEFT JOIN `ac_guest_ban` ON `ac_guest`.`id` = `ac_guest`.`id_user` 
WHERE `ac_guest`.`id_user` IS NULL
Изменил: Петр (26.03.2013 / 12:52)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск