Как я могу делать query, чтобы вводить?

Estructura de la BD

Это изображение показывает структуру моей базы данных, но попробовав вводить реестр в консультациях, я не знаю, как связывать это с таблицей historial.

Я объясняю структуру, Empresa сохраняй имена, поля какого-то предприятия, Web сохраняй данные какого-то пользователя какого-то предприятия, historial сохраняй данные о начале и завершение сеанса, consultas все то, что происходит в этом сеансе. Когда пользователь консультирует какой-то продукт, это должно сохранять в таблице consultas согласно id historial, в сеансе пользователь может делать много консультаций, идея состоит в том, чтобы присоединять с сеансом консультации, но я не нахожу query, который это делает.

0
задан 06.12.2016, 20:01
4 ответа

Ты можешь делать insert и внутри субконсультация, которую тебе получал бы id, ты консультируешься в вопросе.

INSERT INTO
  Consultas (id_historial, n...)
VALUES
  ( (SELECT id_historial
     FROM Historial AS H JOIN Web AS W
     ON H.id_web = W.id_web WHERE W.nombre_usuario = $_SESSION['nombre-usuario'] ))

Ты добавляешь синтаксис, согласно которому ты использовал.

Логика:

  1. Сначала ты получаешь id_historial согласно пользователю logeado, информация которой находится в Веб таблице (это субконсультация).
  2. Ты вводишь в Консультациях используя id_historial, который ты получил в предыдущем шаге.
1
ответ дан 24.11.2019, 12:15

Хорошие, ты мог бы делать следующее, если ты хочешь поддержать строгий контроль, мог помещать, как пойдите Веб IP клиента (

// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

);

Исторический id мог бы быть числом autoincrementable просто, таким образом знал, что ты сделал консультации в том же сеансе, так как все группировались бы в том же самом, пойдите autoincrementable...

Потом начало и завершение сеанс они были бы объектом Восходите, с одним new Date(); в подходящем мгновении это было бы достаточным.

Надеешься быть ты помогший :D!

Ok отвечая на твой комментарий ты должен создавать один пойдите пользователя, который будет единственным для каждого пользователя! Таким образом ты убеждаешься, что, хотя они присоединятся одновременно они принадлежат различным реестрам :)

пойдите пользователя он появится в Вебе и будет основной forana в биографии и консультациях.

1
ответ дан 24.11.2019, 12:15
  • 1
    В Веб таблице id_web уже это идентификатор ú nico для пользователя, и всякий раз когда loguea или закрой сеанс, делается реестр с new Восходите presisamente, как ты это показываешь, где у меня есть проблемы, это, чтобы регистрировать консультацию, для того, чтобы он принадлежал сеансу, так как два пользователя смогли бы loguearse в то же время, и единственное, что они считали бы различным, - id_historial и id_web, но не, как знание, которому он соответствует каждому пользователю. – Alberto Rojas 06.12.2016, 02:51

Сначала ты должен иметь в виду, что в loguearse в системе ты будешь должен создавать переменные сеанса для id_web и id_historial, поле inicioSession он создается с настоящим часом и датой, cierreSession сначала он будет введен как один NULL. Сейчас эти данные вводятся в таблице Historial.

Хорошо, сейчас всякий раз когда пользователь сделал консультацию ты будешь использовать параметр сеанса id_historial, поле id_consultas это должен будет быть автомобиль incrementable относительно id_historial (а именно, это должен быть составной ключ) и позже также ты пошлешь остальные поля, которые соответствуют таблице Consultas для того, чтобы ты INSERT в базе данных останьтесь следующей формы понимая, что ты реализуешь INSERT через один Stored Procedure

CREATE PROCEDURE InsertaConsultas
     @inIdHistorial INT
    ,@vcPlacaConsultada VARCHAR(256)
    ,@dtHoraConsultada  DATETIME
    ,@btExportarPDF     BIT
    ,@dtHoraExportacion DATETIME
AS
BEGIN
    DECLARE @inIdConsultas INT
    SET @inIdConsultas = 0

    SELECT @inIdConsultas = ISNULL(id_consultas, 0) + 1 FROM consultas
    WHERE id_historial = @inIdHistorial

    INSERT INTO [consultas]
                ([id_consultas]
                ,[id_historial]
                ,[PlacaConsultada]
                ,[HoraConsultada]
                ,[ExportarPDF]  
                ,[HoraExportacion])
            VALUES
                (@inIdConsultas
                ,@inIdHistorial
                ,@vcPlacaConsultada
                ,@dtHoraConsultada  
                ,@btExportarPDF     
                ,@dtHoraExportacion)

END

В конце концов, ты будешь должен манипулировать завершением сеанса и посылать один UPDATE для того, чтобы с настоящей датой и часом стало отвечающим совремнным требованиям поле cierreSession и смоги иметь полную информацию в таблице Historial

1
ответ дан 24.11.2019, 12:15

Ты был бы должен добавлять, что поле id_web в таблице ты 'консультируешься'. Как он, если 2 ó больше пользователей инициализируют сеанс в то же время, как ты показываешь в одном из твоих комментариев, у тебя не было бы способа знать, кому принадлежит она (s) консультация (s) реализованная (s) в этом сеансе. sakulino он это объясняет в конце Вашего ответа.

0
ответ дан 24.11.2019, 12:15

Теги

Похожие вопросы