2015-04-18 4 views
0

Я строию аукционный дом. Я использую пакет nodejs-MySQL и у меня есть этот nodejs server.js -кода для главной страницы, где несколько аукционов отображаются:Node.js MySQL: Select-statement зависит от строки запроса?

// loop 
var pollingLoop = function() { 
    // Doing the database query 
var query = connection.query('SELECT a.`id`,a.`product_id`,a.`price`,a.`random`,a.`price_end`,TIMESTAMPDIFF(SECOND,NOW(),a.`date_end`) AS duration,p.`price_retail` FROM `auctions` AS a LEFT JOIN `products` AS p ON p.`id` = a.`product_id` WHERE TIMESTAMPDIFF(SECOND,NOW(),a.`date_end`) > "-1" ORDER BY `duration` DESC,`id` DESC'), 
    auctions = []; 
  1. Как я могу выполнить, что этот запрос изменяются при $_GET['id'] доступен другому SELECT -стату с WHERE -condition? Потому что я хочу добавить WHERE auction='$_GET['id']'за один аукцион, тогда (но серверный).
  2. Есть ли способ сделать его более читаемым? Потому что когда я нажимаю ENTERSELECT -statement не будет работать вообще. Вот как это выглядит на nodejs-сервер-файл server.js: http://i.stack.imgur.com/37fDl.jpg

ответ

0

Есть два способа, чтобы разбить строку Javascript в несколько строк: Backslashing и конкатенации.

Разграничение с обратными косыми чертами

var text = "Lorem ipsum dolor sit amet,\ 
consectetur adipisicing elit,\ 
sed do eiusmod tempor incididunt\ 
ut labore et dolore magna aliqua."; 

, ограничивающие с конкатенацией

var text = "Lorem ipsum dolor sit amet," 
     + "consectetur adipisicing elit," 
     + "sed do eiusmod tempor incididunt" 
     + "ut labore et dolore magna aliqua."; 

Вам нужно построить запрос динамически. Что-то вроде этого.

var query = 'SELECT \ 
    a.`id`, \ 
    a.`product_id`, \ 
    a.`price`, \ 
    a.`random`, \ 
    a.`price_end`, \ 
    TIMESTAMPDIFF(SECOND, \ 
     NOW(), \ 
     a.`date_end`) AS duration, \ 
    p.`price_retail` \ 
FROM \ 
    `auctions` AS a \ 
     LEFT JOIN \ 
    `products` AS p ON p.`id` = a.`product_id`'; 

var where = ''; 
if (condition) { 
    where = 'WHERE \ 
    TIMESTAMPDIFF(SECOND, \ 
     NOW(), \ 
     a.`date_end`) > - 1'; 
} else { 
    where = "auction='$_GET['id']'"; 
} 

var order = ' ORDER BY `duration` DESC , `id` DESC'; 
query = query + where + order 
var res = connection.query(query), auctions = []; 

p.s. Это всего лишь идея. Например, вы можете использовать var where = array() и заполнить его условиями. Затем просто зациклируйте массив и создайте условия соединения запроса на AND.

UPD:

Если вы не используете выразить модуль, вы можете найти GET параметров, используя модуль URL.

var query = require('url').parse(req.url,true).query; 

var id = query.id; 
var some_par = query.some_par; 

For url: /path/filename?id=123&some_par=456 

Затем вы можете создать запрос с id переменной.

+0

Спасибо. Теперь я пытаюсь получить идентификатор, но мой результат «неопределен», чем. С этим кодом: 'var qry = require ('url'). Parse (socket.handshake.url); var qry_id = qry.id; ' –

+0

Не забудьте TRUE - .parse (socket.handshake.url, true); Что вы получите console.log (qry)? –

+0

Да, я уже добавил «правда». Тогда он говорит об объекте объекта. Но если я набираю 'console.log (qry.path)' весь url показывает. Но как я могу получить конкретную строку запроса, например id? И почему он показывает URL-адрес socket.io, а не URL-адрес моего локального хоста? –

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