Интересно, можно ли оптимизировать мои запросы, чтобы избежать необходимости отправлять десять запросов, проверить, имеют ли три основные таблицы и две составные таблицы нужные элементы, а если нет, то вставить их.
("Составная таблица »- это то, что я называю таблицей, которая содержит два первичных ключа, которые оба являются ссылкой на первичный ключ в другой таблице, потому что я не знаю правильный термин)
Поэтому я попытался выяснить,можно получить все необходимые идентификаторы из трех основных таблиц в одном запросе, но я не могу заставить его работать.
Вот некоторые из вещей, которые я пробовал.
select t1.a AS EID, t2.a AS CID, t3.a AS IID from (select ID as a from Events where event = "test3") as t1, (select ID as a from Coordinates where Coordinates = "10.22,14.15") as t2, (select ID as a from Intervals where Interval = "From 12:15 To 18:30") as t3;
SELECT ID AS eid FROM Events WHERE event = "test3" UNION ALL SELECT ID AS cid FROM Coordinates WHERE Coordinates = "10.22,14.15" UNION ALL SELECT ID AS iid FROM Intervals WHERE Interval = "From 12:15 To 18:30"
И это то, чем я сейчас занимаюсь
if(!empty($this->event) && $this->event!== false){
$sql = "SELECT ID FROM Events WHERE event = ?";
$values = array($this->event);
$db->setQuery($sql, $values);
$db->singleFetch();
if($db->getResults() == 1){
$eid = $db->getFetch()[0]['ID'];
}
else{
$sql = "INSERT INTO Events (event, Description) VALUES (?, ?)";
$values = array($this->event, $this->description);
$db->setQuery($sql, $values);
$db->singleQuery();
$eid = $db->getLast();
}
}
//I am doing this for all three main tables,
//to get the ids needed for me to be able to do this.
if(isset($eid) && isset($cid)){
$sql = "SELECT count(*) FROM EC WHERE EID = ? AND CID = ?";
$values = array($eid, $cid);
$db->setQuery($sql, $values);
$db->singleFetch();
if($db->getFetch()[0]['count(*)'] == 0){
$sql = "INSERT INTO EC (EID, CID) VALUES (?, ?)";
$values = array($eid, $cid);
$db->setQuery($sql, $values);
$db->singleQuery();
}
}
//Which i then do for both composite tables
Либо я получаю свой массив выборок при каждой возможной комбинации, либо я даже не получаю свой массив выбороки иногда я получаю его, но с двумя одинаковыми идентификаторами событий и ничем иным.