MySQL SELECT из таблицы, где row = (SELECT val1, val2, val3, ... и т. Д.) - PullRequest
0 голосов
/ 14 декабря 2018

Я бы хотел проверить, существует ли строка, но без указания имен столбцов, а только их значений.IE.

+------+------+------+
|field1|field2|field3|
+------+------+------+
| abc  | cba  |  val |
+------+------+------+

SELECT * FROM myTable WHERE ... = (SELECT 'abc', 'cba', 'val')

Возможно ли это?

Я пишу функцию в php, и я хотел бы добавить строку, если такой строки не существует.Функция будет принимать n параметров, т.е.

addNewRowIfDoesNotExist('table1', 'abc', 'cba', 'val');

Я не хочу изменять структуру функции, но мне нужно проверить, существует ли такая строка в таблице, как сказано.Так что я не передаю имена столбцов.Итак, как я могу проверить, существует ли строка, не сообщая имена столбцов?

Спасибо
Майк

1 Ответ

0 голосов
/ 14 декабря 2018

Спасибо за комментарии.Я нашел его в интернете.

проверьте, эквивалентны ли два "выбранных"
http://www.mysqltutorial.org/mysql-minus/

Спасибо.
Майк

Если вы хотите понять, что я имею в виду, вы идете:

function insertRecordIntoTableIfNotExist()
{
    if (func_num_args() < 2)
        exit("Too few arguments at insertRecordIntoTableIfNotExist()<br>");

    $str = changeTableIntoStringWithCommasAndQuotes(func_get_args());
    $firstComma = strpos($str, ",");

    $tableName = substr($str, 0, $firstComma);
    $tableName = substr($tableName, 1, strlen($tableName) - 2);
    $rest = substr($str, $firstComma + 1);

    $result = executeQuery("SELECT " . $rest . " MINUS SELECT * FROM " . $tableName . "_v;");

    if ($result != FALSE)
        if (hasRows($result))
            return;

    if (executeQuery("INSERT INTO " . $tableName . " VALUES(NULL, " . $rest . ");") == FALSE)
    {
        printWrongQuery();

        exit("Error while inserting at insertRecordIntoTableIfNotExist()<br>");
    }
}

Вам необходимо указать новый вид перед запуском этой функции.В моих таблицах на первом месте стоит id, поэтому я не берусь за это.

...