как объединить данное условие в один так как выводить только одну запись а должно все которых нет во второй таблице данный код выводит только одну запись,а в базе 4 записи должно вывести три так как в таблице history есть запись об одном из 4 сайтов . как объединить эти два запроса чтобы выводились остальные записи Код (PHP): $USER = $_SESSION["user"]; $ZALOBA = 25; $TIMEOFF = time()-60*60*24; $stmt = $PDO->prepare("SELECT * FROM asp_ads WHERE status=? and zaloba<? ORDER BY vip DESC"); $stmt->execute(array(1,$ZALOBA)); $stmt->setFetchMode(PDO::FETCH_LAZY); while($SQLUSER = $stmt->fetch()) { $stmt = $PDO->prepare("SELECT * FROM `asp_ads_history` WHERE `id_site`=? and user=? and timeserf>?"); $stmt->execute(array($SQLUSER->id,$USER,$TIMEOFF)); $stmt->setFetchMode(PDO::FETCH_LAZY); $SQLSyte = $stmt->fetch(); if($SQLSyte==false) { echo '<table width="95%" border="0" cellspacing="0" cellpadding="0" align="center">'; echo '<tr>'; echo '<td colspan="4" id="marg">'; echo $SQLUSER->url; echo '<hr class="style-three" />'; echo '</td>'; echo '</tr>'; echo '</table>'; } } PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
А что было на месте знаков вопроса? Как эти таблицы между собой связаны? По каким атрибутам? Составной запрос выполняется через оператор LEFT JOIN (RIGHT JOIN)
Дайте структуру таблиц asp_ads и asp_ads_history И на всякий случай напишите по каким атрибутам они связаны
необходимо чтобы из первой таблицы не выводило запись (id) который соответствует WHERE `id_site`=(id с первой страницы) and user=(из сесии) and timeserf> (из переменно) Добавлено спустя 6 минут 38 секунд: Код (PHP): DROP TABLE IF EXISTS `asp_ads`; CREATE TABLE `asp_ads` ( `id` int(11) NOT NULL AUTO_INCREMENT, `url` varchar(150) NOT NULL, `status` int(1) NOT NULL, `zaloba` int(20) NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=cp1251; DROP TABLE IF EXISTS `asp_ads_history`; CREATE TABLE `asp_ads_history` ( `id` int(255) NOT NULL AUTO_INCREMENT, `id_site` int(255) DEFAULT NULL, `user` varchar(200) DEFAULT NULL, `timeserf` int(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; Добавлено спустя 1 минуту 33 секунды: id и id_site они связаны между собой
Код (PHP): SELECT A1.id, A1.url, A1.status, A1.zaloba, A2.user, A2.timeserf, A2.id as history_id FROM asp_ads as A1 LEFT JOIN (asp_ads_history as A2) ON (A1.id = A2.id_site) WHERE A1.status=? and A1.zaloba<? and A2.user=? and A2.timeserf>? ORDER BY ?????????? DESC Только что за атрибут vip - я не понял. В таблицах его нет
$ZALOBA = 25; ну сортировка по випу щас не обязательно должно еще присутствовать zaloba<$ZALOBA Добавлено спустя 44 секунды: ой сори не заметил что присутсвует
сделал так ни че вобще не выводи Код (PHP): $USER = $_SESSION["user"]; $ZALOBA = 25; $TIMEOFF = time()-60*60*24; $stmt = $PDO->prepare("SELECT A1.id, A1.url, A1.status, A1.zaloba, A2.user, A2.timeserf, A2.id as history_id FROM asp_ads as A1 LEFT JOIN (asp_ads_history as A2) ON (A1.id = A2.id_site) WHERE A1.status='1' and A1.zaloba<'".$ZALOBA."' and A2.user=".$user." and A2.timeserf>".$TIMEOFF.""); $stmt->execute(); $stmt->setFetchMode(PDO::FETCH_LAZY); while($SQLUSER = $stmt->fetch()) { echo '<table width="95%" border="0" cellspacing="0" cellpadding="0" align="center">'; echo '<tr>'; echo '<td colspan="4" id="marg">'; echo $SQLUSER->url; echo '<hr class="style-three" />'; echo '</td>'; echo '</tr>'; echo '</table>'; } Добавлено спустя 1 минуту 45 секунд: Код (PHP): DROP TABLE IF EXISTS `asp_ads`; CREATE TABLE `asp_ads` ( `id` int(11) NOT NULL AUTO_INCREMENT, `url` varchar(150) NOT NULL, `vip` varchar(1) NOT NULL DEFAULT '0', `status` int(1) NOT NULL, `zaloba` int(20) NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=cp1251;
Их точно тут нет))) Добавлено спустя 1 минуту 49 секунд: Dante5 Выполни мой запрос для начала в командной строке. Без условия и сортировки Если там всё ок , то уже надо пилить твой php-код
о заработало но не так как надо выводит то чо находится в обоих таблицах а надо на оборот если в asp_ads_history есть то не выводить ав выводить те которых нет в asp_ads_history A2.user=? and A2.timeserf>? то есть если в asp_ads_history даже если есть A2.id_site но не совпадает A2.user="сесия узера " и так далее
Чтобы мне это понять - надо увидеть как было изначально всё без знаков вопросов Хотя... начинаю понимать...
надо чтобы показывало список сайтов тех которые не подходят по условию в таблице истории как то так щас получается наоборот показывает только те которые есть в историии и у них совпадает условие Добавлено спустя 2 минуты 30 секунд: вот оно работает но на надо выборку на оборот что бы была Код (PHP): $USER = $_SESSION["user"]; $ZALOBA = 25; $TIMEOFF = time()-60*60*24; $stmt = $PDO->prepare("SELECT A1.id, A1.url, A1.status, A1.zaloba, A2.user, A2.timeserf, A2.id as history_id FROM asp_ads as A1 LEFT JOIN (asp_ads_history as A2) ON (A1.id = A2.id_site) WHERE A1.status=? and A1.zaloba<? and A2.user=? and A2.timeserf>?"); $stmt->execute(array(1,$ZALOBA,$USER,$TIMEOFF)); $stmt->setFetchMode(PDO::FETCH_LAZY); while($SQLUSER = $stmt->fetch()) { echo '<table width="95%" border="0" cellspacing="0" cellpadding="0" align="center">'; echo '<tr>'; echo '<td colspan="4" id="marg">'; echo $SQLUSER->url." = ".$SQLUSER->id; echo '<hr class="style-three" />'; echo '</td>'; echo '</tr>'; echo '</table>'; }
Когда в условии есть фраза "кроме тех которые..." можно делать так: делаем под-запрос, возвращающий id и в родительском запросе указываем Код (PHP): ... WHERE id NOT IN(...подзапрос...)
допустим есть 4 записи в таблице Код (PHP): INSERT INTO `asp_ads` VALUES ('3','www.test.net','1', '2', '23'); INSERT INTO `asp_ads` VALUES ('4','www.test1.net','1', '2', '12'); INSERT INTO `asp_ads` VALUES ('5','www.test2.net','1', '2', '11'); INSERT INTO `asp_ads` VALUES ('6','www.test3.net','1', '2', '14'); и одна в asp_ads_history Код (PHP): NSERT INTO `asp_ads_history` VALUES ('2', '3', 'slawon245', '1438693358'); необходимо вывести http://www.test3.net' так как их нет в таблице asp_ads_history Добавлено спустя 12 минут 56 секунд: в принципе даеже если они будут но с другим юзером тоже чтобы показывались
куда это вписать или что заменит в этом запросе Код (PHP): "SELECT A1.id, A1.url, A1.status, A1.zaloba, A2.user, A2.timeserf, A2.id as history_id FROM asp_ads as A1 LEFT JOIN (asp_ads_history as A2) ON (A1.id = A2.id_site) WHERE A1.status=? and A1.zaloba<? and A2.user=? and A2.timeserf>?"
У меня получилось как то так. Может чего напутал... Проверьте сначала в командной строке заменив знаки вопросов Код (PHP): SELECT * FROM asp_ads WHERE status=? and zaloba<? AND IF((SELECT COUNT(*) FROM `asp_ads_history` WHERE asp_ads_history.id_site = asp_ads.id and user=? and timeserf>?)>0, 0, 1) ORDER BY vip DESC Совет на будущее - совместить эти две таблицы в одну. Добавить поле "История" со значениями 1 или 0. Есть правила для проектирования баз данных. Как я понял связь между Вашими таблицами 1:1
совместить как если юзеры в истории могут быть разные Добавлено спустя 2 минуты 41 секунду: проверил пока что устраивает кажись как надо работает Добавлено спустя 2 минуты 23 секунды: спасибо огромное форум бомба лишних сообщений ноль только полезная помощь
А при чем тут юзеры - вы это поле, как и остальные переносите в первую таблицу. Вы мои догадки лучше подтвердите или опровергните: в таблице asp_ads_history не более 1й записи где asp_ads_history.id_site = asp_ads.id?
не все юзерам будут доступны некоторые ссылки притом что и дата тоже будет влият на то когда ему ее показать Добавлено спустя 3 минуты 38 секунд: и в таблице asp_ads_history будет много записей к примеру тотже Ид но уже с другим юзером и датой
Поле `timeserf` int(255) DEFAULT NULL, - это дата? Все атрибуты в одну таблицу. Если есть еще какая-то зависимость, по которой некоторые атрибуты не могут быть в одной таблице - их в другую. Но я вижу, что тут можно слить всё воедино без проблем. Это нужно, чтоб правильно построить(упростить) логику запросов (Этот запрос показывает, что структура БД хромает) и логику приложения. Не просто так дядьки пишут учебники по БД. Найдите метод проектирования "Сущность - Связь", если всё будет понятно - посмотрите ещё метод нормальных форм(3х этапов в большинстве случаев достаточно). Это два основных метода проектирования структуры реляционной БД. Используйте любой - не прогадаете.