Kyseessä on haku-skripti.
On tilanne, että on 200 riviä taulukossa.
Sitten on silmukka, joka testaa jokaisen rivin ja tutkii täyttääkö se tietyt ehdot. Jos kyseinen rivi täyttää ehdot, pitäisi tulostaa tietty arvo toisesta taulukosta.
Onko tuo parempi tehdä niin että silmukka joka kerralla kyselyllä etsii sen rivin toisesta taulukosta, vaiko niin, että ennen silmukkaa on jo haettu toinen taulukko muuttujaan ja sitten silmukassa on toinen silmukka, joka etsii oikean arvon.
Toisin sanoen: Kuinka kovasti MySQl rasiintuu, jos tulee kyselyitä 100-200 per sivulataus ja kävijöitä esim. parikymmentä samaan aikaan ?
Tuossa tulee max 2 kyselyä kun optimoi sitä eli:
1) Kelaa koko 200 rivin taulu läpi php tauluun. Tutki se läpi omilla ehdoillasi ja kerää ne rivinumerot johonkin talteen jotka haluat hakea toisesta taulusta.
2) Toisessa SQL kyselyssä sitten haet yhdellä kyselyllä kaikki ne rivit jotka sinua kiinnostaa siitä toisesta taulusta.
Jos tietysti olet järkevä ja pätevä, niin yksi kysely riittää: pistät vain ehtoja siihen MySQL kyselyyn ja annat tietokannan hoitaa ehtojen tarkistuksen. Avainsanoja on AND & OR.
Tilanteesta riippuen 1 tai 2 kyselyä. 200 riviä taas ei ole mikään määrä, enemmän menee aikaa kun avataan yhteyksiä tietokantaan ja sen sellaista. Kun rivejä alkaa olemaan 2 miljoonaa, niin se vaikuttaa.
--WIZ--
Kuinkas siinä tapauksessa, että tarkistan molempien taulujen arvoja. (Samalla asialla on molemmissa tauluissa sama id)
Kun ensimmäistä taulua kelaa läpi joutuuko jokaisella kerralla tekemään kyselyn toiseen tauluun. Mikä on parempi tapa ?
Ongelmasi vaikuttaa sen verran yksinkertaiselta, että uskoisin sen ratkeavan ihan helpolla JOIN
illa. Eli yhdellä kyselyllä voit hakea useammastakin taulusta tietoa. Tässä simppeli esimerkki kahdesta taulusta hakemisesta muutamilla hakuehdoilla:
SELECT linkit.url, linkit.otsikko, kategoria.nimi FROM linkit INNER JOIN kategoria ON linkit.kategoria_id = kategoria.id WHERE linkit.otsikko LIKE '%putka%' AND kategoria.nimi LIKE '%ohjelmointi%'
Jotain tälläistä etsinkin :P
Tää auttoi paljon..!
Aihe on jo aika vanha, joten et voi enää vastata siihen.