2016-03-15 3 views
-1

Я довольно новичок в Mysql и PHP и должен признать, что мой мозг перебегает к доступу к MS. Я пытаюсь обновить приложение доступа к старым мс в веб-приложении с помощью mysql db. Многие вещи идут хорошо, и я мазохистически наслаждаюсь кривой обучения.Mysql Вставка, обновление, удаление нескольких таблиц

за исключением: -

В MSACCESS приложение, которое я могу основывать форму на запросе, который содержит несколько таблиц, и, следовательно, вставлять, обновлять и удалять данные в одной или нескольких таблиц. msaccess query

SELECT 
    merlinuc_ucd.tblsuppliers.SupplierID, 
    merlinuc_ucd.tblsuppliers.PurchasedFrom, 
    merlinuc_ucd.tblsuppliers.Street, 
    merlinuc_ucd.tblsuppliers.City, 
    merlinuc_ucd.tblsuppliers.State, 
    merlinuc_ucd.tblsuppliers.Zip, 
    merlinuc_ucd.tblsuppliers.Telephone, 
    merlinuc_ucd.tblvehicles.ID, 
    merlinuc_ucd.tblvehicles.LienHolderName, 
    merlinuc_ucd.tblvehicles.Stock, 
    merlinuc_ucd.tblvehicles.DateOfPurchase, 
    merlinuc_ucd.tblvehicles.SupplierID, 
    merlinuc_ucd.tblvehicles.Year, 
    merlinuc_ucd.tblvehicles.Make, 
    merlinuc_ucd.tblvehicles.Model, 
    merlinuc_ucd.tblvehicles.Mileage, 
    merlinuc_ucd.tblvehicles.BodyType, 
    merlinuc_ucd.tblvehicles.Color, 
    merlinuc_ucd.tblvehicles.Transmission, 
    merlinuc_ucd.tblvehicles.StateOfOrigin, 
    merlinuc_ucd.tblvehicles.PreviousOwnersName, 
    merlinuc_ucd.tblvehicles.PreviousOwnersAddress, 
    merlinuc_ucd.tblvehicles.PreviousOwnerCity, 
    merlinuc_ucd.tblvehicles.PreviousOwnersState, 
    merlinuc_ucd.tblvehicles.PreviousOwnersZip, 
    merlinuc_ucd.tblvehicles.PreviousOwnersPrincipalUse, 
    merlinuc_ucd.tblvehicles.PreviousOwnersBodyDamage, 
    merlinuc_ucd.tblvehicles.PreviousOwnersMechanicalDefects, 
    merlinuc_ucd.tblvehicles.MSRP, 
    merlinuc_ucd.tblvehicles.RetailPrice, 
    merlinuc_ucd.tblvehicles.Notes, 
    merlinuc_ucd.tblvehicles.PurchasePrice, 
    merlinuc_ucd.tblvehicles.Transportation, 
    merlinuc_ucd.tblvehicles.Cleaning, 
    merlinuc_ucd.tblvehicles.TotalRO, 
    merlinuc_ucd.tblvehicles.EngineType 
FROM 
    merlinuc_ucd.tblsuppliers 
     INNER JOIN 
    merlinuc_ucd.tblvehicles ON merlinuc_ucd.tblsuppliers.SupplierID = merlinuc_ucd.tblvehicles.SupplierID 
ORDER BY merlinuc_ucd.tblvehicles.Make; 

Я попробовал этот запрос в MySQL Workbench, и это дает мне читать только результаты (запрос содержит PK из обеих таблиц). Я искал в течение нескольких месяцев на этом, но если я нахожу какую-либо информацию (и я не уверен, что это так), это выше моей головы. Обходной путь, который я использовал, состоит в том, чтобы основывать свои php-формы на одной таблице за раз, и это работает нормально, но это не мое любимое решение, так как это делает его более запутанным для конечного пользователя.

+0

MySQL Workbench не является заменой для Microsoft Access. Вы пытаетесь создать приложение поверх MySQL или просто используете его как простую базу данных? – tadman

+0

Я заменяю бэкэнс доступа MS на MySQL и интерфейс доступа ms с php. Часть php идет хорошо, часть MySQL работает до некоторой степени, но я пытаюсь преобразовать запрос доступа ms к MySQL – Michael

+0

Какой запрос? Все, что я вижу, это скриншот ссылки. – tadman

ответ

0

MS Access и MySQL - это два совершенно разных продукта. Я предполагаю, что вы хотите использовать что-то, что сопоставимо с форматами доступа MS, подключали ли вы таблицу с формой, и вы можете обновлять вставку и т. Д.

Это не то, как работают MySQL и Workbench. В частности, верстак не является интерфейсом, например MS Access (частично). В Access у вас есть много автоматизации, которая создает процедуры вставки и обновления в фоновом режиме при подключении таблицы к форме.

В MySQL вам нужно сделать это самостоятельно, и вы должны разработать передний конец, который поможет вам. MySQL - мощный инструмент, и в какой-то момент вам нужно оставить Access, если вам нужна более быстрая и большая база данных, вы можете настроить ее на очень глубоком уровне.

Здесь вы можете найти все тогда манипуляциями заявления нужно: http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-data-manipulation.html

Вы также можете использовать PHPMyAdmin: https://www.phpmyadmin.net/

UPDATE:

Вы можете сделать это с транзакцией. Дальнейшие чтения здесь: SQL Update,Delete And Insert In Same Time

Я использую другой подход, выполняя все это в хранимой процедуре. Я просто загрузить все данные в одну таблицу (я называю это write_table), а затем пусть базы данных решить, что делать с передачей данных в другую таблицу (так называемый read_table)

Вот код:

CREATE DEFINER=`user`@`%` PROCEDURE `validateData`() 
BEGIN 

CREATE TEMPORARY TABLE IF NOT EXISTS temp_write_data AS (SELECT * FROM write_data); 

UPDATE read_data AS r 
    LEFT JOIN 
    temp_write_data as w 
    ON (r.id = w.id) 
    Set r.somecolumn = w.somecolumn 
    WHERE w.othercolumn is not null; 

INSERT INTO read_data 
    SELECT * 
    FROM temp_write_data AS w 
     LEFT JOIN read_data AS r 
     ON (r.id = w.id) 
    WHERE r.othercolumn IS NULL; 

DELETE write_data.* FROM write_data 
    LEFT JOIN temp_write_data 
    using(guid) 
    WHERE temp_write_data.date is not null; 

DROP TEMPORARY TABLE temp_write_data; 
END 

Это наверняка немного сложно, но это работает для меня, и я могу позволить моему фронту быть очень тонким. Я должен сказать, что мое решение - это таблица Excel, которая напрямую связана с сервером mysql, поэтому между ними нет сценария. Либо база данных, либо электронная таблица должны выполнять логику. Я решил позволить фронту быть просто передним концом и позволить базе данных выполнять эту работу. Про является то, что мне не нужно транслировать так много данных между ними. Кон, что я думаю, что это не лучшая идея хранения логики в базе данных.

Но со сценарием вы наверняка найдете третий (и лучший) способ.

С наилучшими пожеланиями Мартин

+0

Я использую Workbench исключительно для написания и тестирования запросов. Мой передний конец php, и я искал и читал так много статей по этой теме, но я не ближе к пониманию того, как вставлять, обновлять и удалять из одного запроса. – Michael

+0

Хорошо, есть одна возможность, называемая «транзакциями». Вот вопрос к этой теме. http://stackoverflow.com/questions/17647923/sql-update-delete-and-insert-in-same-time –

+0

Я для себя делаю это в хранимой процедуре, позволяя базе данных решить, что делать с данными. Я вставляю его в таблицу и вызываю процедуру. Больше в моем описании выше. –

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