2016-01-07 1 views
0

Я хотел бы сделать миссию щелчка php. Мне нужно указать заголовок и url цикла mysql при условии.Mysql выберите данные, где userid и clickid не существует

мое состояние (показать t2.title,t2.url), если userid и t2.id не существует в таблице click_log при t2.clickdate = $todaydate.

У меня есть 2 таблицы, первый это click_log А.С. t1

+--------+-----------+----------------+---------------+ 
| ID  | uid  | clickdate  | clickid  | 
+--------+-----------+----------------+---------------+ 
| 1  | 1   | 1452009600  | 1    | 
| 2  | 1   | 1452009600  | 2    | 
| 3  | 1   | 1452009600  | 3    | 
| 4  | 1   | 1452096000  | 1    | 
| 5  | 1   | 1452096000  | 2    | 
+-----------------------------------------------------+ 

t1.clickdate является GMT + 8 timestamp, t1.clickid = t2.id

Вторая таблица click_title КАК t2

+---------+---------+--------------+-------------+------------+ 
| ID  | title | url   | status  | other  | 
+---------+---------+--------------+-------------+------------+ 
| 1  | Helo | http://xxx | 1   |   | 
| 2  | World | http://www | 1   |   | 
| 3  | Good | http://ggg | 1   |   | 
| 4  | Morning | http://aaa | 2   |   | 
+-------------------------------------------------------------+ 

Мои кодирования определено:

$_G['timestamp'] = time(); //my server is GMT+8 
$todaydate = date("Y-m-d",($_G['timestamp'])); //output 2016-01-07 
$todaytimestamp = strtotime($todaydate); //output 1452096000 
$_G['uid'] = intval($_GET['userid']); //this is user id 

я запрос, как это:

$queryJN = DB::query("SELECT t1.*,t2.title,t2.url FROM ".DB::table('click_log')." t1 LEFT JOIN ".DB::table('click_title')." t2 ON (t1.clickid = t2.id) WHERE (how to write the codition?)"); 
while($rowJN = DB::fetch($queryJN)){ 
    $jn_list[] = $rowJN; 
} 

Я пытаюсь что-то вроде:

$queryJNbux = DB::query("SELECT t1.*,t2.title,t2.url FROM ".DB::table('click_log')." t1 LEFT JOIN ".DB::table('click_title')." t2 ON (t1.clickid = t2.id) WHERE $_G[uid] IS NULL AND t2.id IS NULL AND t2.status = '1' AND t1.clickdate != '$todaydate'"); 

Но наклоняю работы, пусть покажет и url потому t1.id 3 не существует в t1.clickid когда t1.clickdate является 1452096000

Для проблемы безопасности DB::query не в состоянии сделать select * from дважды в 1 запросе. Пожалуйста, помогите мне без select * from два или более, спасибо.

Вчера весь день я думал о другом, после этого я пытаюсь использовать DB::fetch, и он работает, но я не знаю, безопасно ли оно для запроса или может вызвать другую проблему или нет. Возможно, кто-то может улучшить этот запрос.

$queryJN = DB::query("SELECT * FROM ".DB::table('click_title')." WHERE status = '1'"); 
while($rowJN = DB::fetch($queryJN)){ 
    $rowexisting = DB::query("SELECT * FROM ".DB::table('click_log')." WHERE uid = '$_G[uid]' AND clickid = '$rowJN[id]' AND clickdate = '$todaydate'"); 
    if (mysql_num_rows($rowexisting) == '0'){ 
     $jn_list[] = $rowJN; 
    }; 
} 
+0

Посмотрите на функции тузд 'NOT IN()' '$ – Matt

+0

_G ['timstamp'] 'shoulnd't be' $ _G ['timestamp'] '? –

+0

@Matt Привет, я попробую '$ queryJN = DB :: query (" SELECT t1. *, T2.title, t2.url FROM ".DB :: table ('click_log')." T1 LEFT JOIN ".DB: : table ('click_title'). "t2 ON (t1.clickid = t2.id) WHERE t1.clickdate! = '$ todaydate' AND t2.status = '1' AND '$ _G [uid]' NOT IN (t1 .uid) И t2.id NOT IN (t1.clickid) ");' но все же не могу работать :( @ AdamBieńkowski Я уже редактирую, спасибо. –

ответ

0

Вы можете использовать этот запрос ...

Я использовал здесь NOT IN и EXISTS для того, чтобы реализовать свои условия ....

SELECT t2.title,t2.url 
FROM ".DB::table('click_log')." t1 JOIN ".DB::table('click_title')." t2  
WHERE $_G[uid]!=t2.uid AND t2.ID!=t1.ID AND t1.clickdate ='$todaydate' 

Я обновил мой вопрос, как вы здесь нет вложенных запросов.

Существует множество способов записи подзапросов.

Но надейтесь, что этот вопрос может решить ваш запрос.

+0

Привет, извините, что fuction моего 'DB: query' не позволяет мне делать более 1 раза функцию' select * from' в 1 запросе. Поэтому я не могу попробовать ваш ответ. –

+0

т.е. вам не разрешено использовать ' выберите' внутри 'select' ?? – Abbas

+0

да, система w плохой дисплей «это небезопасно для этого запроса» –

0

Вы можете использовать WHERE, если он равен NULL, если ваша колонка имеет значение NULL. вы вытаскиваете данные из 2 таблиц, поэтому нет ПРАВИЛЬНОЙ ВСТУПЛЕНИЯ и ВЗАИМООТНОШЕНИЯ. Вы можете просто использовать JOIN или INNER JOIN.

SELECT t1.*, t2.title, t2.url 
FROM t1 
INNER JOIN t2 
ON t1.clickid = t2.ID 
WHERE t1.uid = NULL AND WHERE t1.clickid = NULL 
OREDER BY t1.clickdate ASC; 

Или используйте COUNT, где отсчет определенного столбца 0

Select Count NOT NULL t1.uid

+0

Я попробовал '$ queryJNbux = DB :: query (" SELECT t1. *, T2.title, t2 .url FROM ".DB :: table ('click_log')." t1 INNER JOIN ".DB :: table ('click_title')." t2 ON (t1.clickid = t2.id) WHERE t1.clickid = NULL AND t1.uid = NULL ORDER BY t2.id ASC ");' но не может работать :(все еще не отображается 't2.id'' 3' title и url –

+0

Я думаю, что ваш синтаксис неверен! Вы пытаетесь это сделать на laravel у вас есть laravel, и вам лучше прочитать документацию. «WHERE t1.clickid = NULL» неверно, вы должны использовать «-> гдеNull ('t1.uid')" ..... ТАКЖЕ ТАКЖЕ tag thi squestion с Laravel, а также PHP, пожалуйста. Если вы довольны ответом, можете ли вы пометить его как правильно, пожалуйста. –

Смежные вопросы