2017-01-04 2 views
0

Eine Möglichkeit, die folgenden Abfragen oder einige von ihnen zu kombinieren? Mein Ziel ist eine schnellere Leistung mit weniger Einsätzen. Ich weiß jedoch nicht, wie ich mit dem ON DUPLICATE KEY UPDATE new_table.pages=VALUES(pages) umgehen soll, wo ich mehr als 2 Variablen einfügen werde.Wie können diese Abfragen kombiniert werden, um eine schnellere Leistung zu erzielen?

mysql_query("INSERT INTO new_table (hash, pages) 
SELECT hash, COUNT(id) AS pages 
FROM behaviour GROUP BY hash 
ON DUPLICATE KEY UPDATE new_table.pages=VALUES(pages)"); 


mysql_query("INSERT INTO new_table (hash, visits) 
SELECT hash, visits from audience 
ON DUPLICATE KEY UPDATE new_table.visits=audience.visits"); 


mysql_query("INSERT INTO new_table (hash, first_visit) 
SELECT hash, timestamp from audience 
ON DUPLICATE KEY UPDATE new_table.first_visit=audience.timestamp"); 


mysql_query("INSERT INTO new_table (hash, last_visit) 
SELECT hash, max(timestamp) from behaviour 
group by hash 
ON DUPLICATE KEY UPDATE new_table.last_visit=VALUES(last_visit)"); 


mysql_query("INSERT INTO new_table (hash, goals) 
SELECT alerts_data_hash, COUNT(*) AS goals 
FROM alerts_data 
WHERE alerts_data_status = 'goal' 
GROUP BY alerts_data_hash 
ON DUPLICATE KEY UPDATE new_table.goals=VALUES(goals)"); 
+0

können Sie eine Multi-Abfrage verwenden, indem Sie auf mysqli_api; das ist eine option und das api könnte etwas schneller sein als mysql_. Könnte die Frage nicht lösen, wird aber helfen, Ihren Code ein bisschen zu reduzieren. –

+0

Plain mysql_ ist seit einiger Zeit veraltet. Sie sollten zur 'mysqli_'-Familie der Funktionen springen – yivi

+1

Jedes Mal, wenn Sie [die' mysql_'] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php verwenden) Datenbankerweiterung im neuen Code ** [ein Kätzchen wird irgendwo in der Welt erdrosselt] (http://2.bp.blogspot.com/-zCT6jizimfI/UjJ5UTb_Bei/AAAAAAAACgg/AS6XCd6aNdg/s1600/luna_getting_strangled.jpg) ** Es ist veraltet und seit Jahren und ist für immer in PHP7 verschwunden. Wenn du nur PHP lernst, verbringe deine Energie damit, die Datenbankerweiterungen 'PDO' oder' mysqli' zu lernen. [Start hier] (http://php.net/manual/en/book.pdo.php) – RiggsFolly

Antwort

0

Ich glaube, das sind die ersten 4-Abfragen

INSERT INTO new_table (hash, pages, visits, first_visit, last_visit, goals) 
SELECT A.hash, COUNT(B.id), A.visits, A.timestamp, MAX(B.timestamp), 0 
FROM audience A 
LEFT OUTER JOIN behaviour B ON B.hash = A.hash 
GROUP BY A.hash 

Ich bin nicht sicher kombinieren, wenn der letzte ein join sein kann oder hätte eine Vereinigung/separate Abfrage sein.

+0

Was ist mit der "Duplicate Key" Zeile? – EnexoOnoma

+0

Ah, habe dieses Bit vergessen. Sie können jedoch, nach der 'GROUP BY',' ON DUPLICATE KEY UPDATE hinzufügen new_table.pages = VALUES (Seiten), new_table.visits = a.visits, etc'. Hier ist ein weiterer Beitrag zum Aktualisieren mehrerer Spalten auf einem doppelten Schlüssel einfügen: http://stackoverflow.com/questions/8991593/on-duplicate-key-update-multiple-columns – CptMisery

Verwandte Themen