Kjapp og trygg hosting for Wordpress

Søke etter ord i mange tabeller?

clinton4

Medlem
Hei,

Hvordan kan jeg på mest mulig effektiv måte søke etter et ord i flere tabeller (300stk) samtidig? Alle tabeller har samme struktur, men forskjellige navn.

Tabellene har navn som

ola_tabell
erik_tabell
jens_tabell
osv...

Uten at jeg har prøvd, vil dette fungere?

SELECT * FROM *_tabell WHERE ord = ord
 

spikre

peterhamre.no
Uten at jeg har prøvd, vil dette fungere?
SELECT * FROM *_tabell WHERE ord = ord

Nei. Det er ugyldig. * kan kun brukes om kolonner.

Jeg ville brukt JOIN her.
- Hvis alle tabellene ligger i samme databasen er det enkelt å hente ut alle tabellnavnene. Loop gjennom dem for å så sette de inn i mysql select med join.
Et kjapt google-søk burde vise deg hvordan
 

adeneo

Medlem
Skrevet veldig fort, og har ikke testet det, men er litt usikker på om man kan bruke spørsmåltegn for å angi tabellen, men i det minste noe i nærheten av noe slikt ville jeg tro skulle fungere ?

PHP:
<?php

$query   = 'tekstjegvilsøketter';
$results = array();
$db      = new PDO('mysql:host=your_hostname;dbname=your_db;charset=UTF-8', $user, $pass);
$stmt    = $db->prepare('SELECT * FROM ? WHERE ord = ?');
$tables  = $db->query("show tables");

while ($row = $tables->fetch(PDO::FETCH_NUM)) {
    $stmt->execute($row[0], $query);
    $results[] = $stmt->fetch(PDO::FETCH_ASSOC);
}

print_r($results);

?>
 

clinton4

Medlem
Legg alt i en tabell, og sett index på navn. 300 tabeller for samme jobb blir helt feil, det er 900 filer som må åpnes (hvs MyISAM)


SELECT * FROM navn WHERE ord = ord AND navn='navn'

Det er nok ikke mulig. Jeg ønsker å søke etter typiske spam ord i ca 300 phpbb installasjoner. Fornavn perfiksen var bare ment som et eksempel :)
 

Pong

Jeg selger sʇɥƃıluʍop :)
Ah, stor forskjell om det er en periodisk jobb eller noe som må kjøres on-customer-demand.

Det er forøvrig bedre med
SELECT pk FROM tabell WHERE description LIKE '*spamord*' OR description LIKE '*annetord*'
enn to stykk queries:
SELECT pk FROM tabell WHERE description LIKE '*spamord*'
SELECT pk FROM tabell WHERE description LIKE '*annetord*'
så bruk gjerne litt tid på å bygge querien selv om det kanskje frister ;).
 
Topp