2016-04-19 4 views
0

Я хочу перевести некоторую инструкцию SQL в DQL любую помощь? у меня есть пользовательский объектЯ хочу перевести SQL на DQL

-------user-------- 
    id 
    username 
    email 
    password 
    ... 
-------------------- 

и друг субъект которым есть 2 атрибута friend_one и friend_two, которые ссылкой на пользователя

------friend---- 

    id 
    friend_one 
    friend_two 
    statu 

-------------- 

поэтому мой SQL заявление являются

UPDATE friend 
SET status="1" 
WHERE 
(friend_one="$user_id" OR friend_two="$user_id") 
AND 
(friend_one="$friend_id" OR friend_two="$friend_id") 

SELECT 'friend_one','friend_two','status' FROM friend 
WHERE 
(friend_one="$user_id" OR friend_two="$user_id") 
AND 
(friend_one="$friend_id" OR friend_two="$friend_id") 

SELECT F.statu, U.username, U.id 
FROM user U, friend F 
WHERE 
CASE 
WHEN F.friend_one = '$user_id' 
THEN F.friend_two = U.user_id 
WHEN F.friend_two= '$user_id' 
THEN F.friend_one= U.user_id 
END 
AND 
F.statu='1' 

любая помощь, пожалуйста:/

ответ

0

Хорошо, но вы на самом деле пытались что-либо до сих пор? Было бы здорово, если бы вы включили свой текущий код в вопрос.

Я хотел бы предложить вам что-то вроде этих запросов ниже: (Отказ от ответственности: Пожалуйста, обратите внимание, что они довольно сырым и не были протестированы)

/* For update */ 
$result = $db->executeUpdate('UPDATE friend AS f SET f.status = "1" WHERE (f.friend_one = ? OR f.friend_one = ?) AND (f.friend_one = ? OR f.friend_two = ?)', 
      array($user_id, $user_id, $friend_id, $friend_id), 
      array(\PDO::PARAM_INT, \PDO::PARAM_INT, \PDO::PARAM_INT, \PDO::PARAM_INT) 
      ); 


/* For first select */ 
$stmt = $db->executeQuery('SELECT f.friend_one, f.friend_two, f.status from friend AS f 
      WHERE (f.friend_one = ? OR f.friend_one = ?) AND (f.friend_one = ? OR f.friend_two = ?)', 
      array($user_id, $user_id, $friend_id, $friend_id), 
      array(\PDO::PARAM_INT, \PDO::PARAM_INT, \PDO::PARAM_INT, \PDO::PARAM_INT) 
      ); 

$result = $stmt->fetchAll(); 


/* For second select */  
$stmt = $db->executeQuery('SELECT f.status, u.username, u.id from friend AS f 
     INNER JOIN user as u ON u.user_id = 
     CASE WHEN f.friend_one = ? THEN f.friend_two WHEN f.friend_two = ? THEN f.friend_one END 
     AND f.status = "1"', 
     array($user_id, $user_id), 
     array(\PDO::PARAM_INT, \PDO::PARAM_INT) 
     ); 

$result = $stmt->fetchAll(); 
0
+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительно] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – Raju

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