joomla_antivirus_logo

Autor Tema: Mysql + PHP pomoč  (Posjeta: 2488 )

0 Članova i 2 Gostiju pregledava ovu temu.

erbi

  • Ozbiljan forumaš
  • ****
  • Postova: 381
  • Karma: 1
    • Profil
    • Radio Tomi
Mysql + PHP pomoč
« : 01. Rujan 2014, 09:41 »
Pozdrav!

Treba mi jedna pomoč oko php i mysql. Imam tablicu u koji je: ime, datum, ip, status
E sad mi treba jedna skripta, koja potraži prvi ip i pronađe sve unose ovog ip-ja. Do ovdje nema problema. Problem se pojavi, kako promjeniti status svima unosima ovog ip-ja, ako so u razponu manje od 24 sati. Ostavi se samo jedan unos.
Ovako bi mi trebalo za sve ip-je, koji su u bazi, da ne tražim ručno.

Dario

  • Global Moderator
  • *****
  • Postova: 1.086
  • Karma: 32
  • Web/Joomla Developer
    • Profil
    • dBlaze
Odg: Mysql + PHP pomoč
« Odgovori #1 : 02. Rujan 2014, 08:21 »
Pozdrav!

Treba mi jedna pomoč oko php i mysql. Imam tablicu u koji je: ime, datum, ip, status
E sad mi treba jedna skripta, koja potraži prvi ip i pronađe sve unose ovog ip-ja. Do ovdje nema problema. Problem se pojavi, kako promjeniti status svima unosima ovog ip-ja, ako so u razponu manje od 24 sati. Ostavi se samo jedan unos.
Ovako bi mi trebalo za sve ip-je, koji su u bazi, da ne tražim ručno.

Ovako iz glave, mislim da bi ovak nešto trebalo proći, samo treba imena tablica (i filed-ova) zamjenit....

DELETE test
FROM test
    INNER JOIN (
        SELECT MAX(ip) AS lastIp, ime, datum
        FROM test
        GROUP BY ip
        HAVING COUNT(*) > 1
    ) duplicate ON duplicate.lastIp = test.ip
WHERE test.datum < duplic.datum;

Prvo svakako backup, a za testiranje možeš u prvoj liniji umjesto "DELETE" napisati "SELECT" i trebao bi ti izbaciti van sve zapise koje bi inače izbrisao... Ako ti izbaci van redove koji su dupli, a nisu najnovij, onda je to - to

Problem bi mogao biti što nema id-a u tablici.... A još jedan način na koji bi mogao to izbjeći je da staviš da je IP adresa Unique u tablici i onda u INSERT statementu napraviš ON DUPLICATE KEY UPDATE, odnosno ako taj key već postoji - update-aš samo datum. Na taj ničin nikad u stvari nebi imao duplikate već samo jedinstvene IP adrese, a više o tome na
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
« Zadnja izmjena: 02. Rujan 2014, 08:25 Dario [ORION] »
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

  • Ozbiljan forumaš
  • ****
  • Postova: 381
  • Karma: 1
    • Profil
    • Radio Tomi
Odg: Mysql + PHP pomoč
« Odgovori #2 : 02. Rujan 2014, 09:18 »
Hvala Dario.
Tablica ima i ID, pa mi ne koristi suviše  :) Ip ne mogu biti unique, jer se svaki dan jedanput može upisat isti ip. U skripti ima, da kontroliše ip i vrijeme upisa. Kod mene radi, al neko je zaobišao i stavio puno zapisa u 10 sekundi. Zaobišao je i cookie iako je ovaj obavezan.

erbi

  • Ozbiljan forumaš
  • ****
  • Postova: 381
  • Karma: 1
    • Profil
    • Radio Tomi
Odg: Mysql + PHP pomoč
« Odgovori #3 : 02. Rujan 2014, 11:38 »
Evo, u tablici je ovako:
    id               datum                        ip                 
"15813","2014-09-01 12:00:00","666"
"15810","2014-09-02 02:00:00","666"
"15811","2014-09-02 04:00:00","666"
"15812","2014-09-02 06:00:00","666"
"15814","2014-09-03 12:00:00","666"
"15815","2014-09-03 14:00:00","666"

Delete bi morao obrisati linije 3, 4, 6, al mi obriše linije 2, 3, 4. Znači, svaki dan je možan samo jedan upis od jednog IP-ja. Noje bitno, dali je to prvi ili poslednji.

Koda je ovakva:
$result = mysqli_query($con,"SELECT *
FROM votes
    INNER JOIN (
        SELECT MAX(ip) AS lastIp, option_id, date
        FROM votes
        GROUP BY ip
        HAVING COUNT(*) > 1
    ) duplicate ON duplicate.lastIp = votes.ip
where DATE_FORMAT(DATE(votes.date), '%Y-%m-%d') = DATE_FORMAT(DATE(duplicate.date), '%Y-%m-%d')");

Dario

  • Global Moderator
  • *****
  • Postova: 1.086
  • Karma: 32
  • Web/Joomla Developer
    • Profil
    • dBlaze
Odg: Mysql + PHP pomoč
« Odgovori #4 : 03. Rujan 2014, 08:17 »
Probaj u ovom queryiju liniju "GROUP BY ip" zamjenit sa "GROUP BY ip, date", mislim da  bi to trebalo bit to
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

  • Ozbiljan forumaš
  • ****
  • Postova: 381
  • Karma: 1
    • Profil
    • Radio Tomi
Odg: Mysql + PHP pomoč
« Odgovori #5 : 03. Rujan 2014, 09:45 »
E, ovo radi kako treba. Ima još jednu manju grešku.
Ako pronađe 2 ili više IP-ja na jedan dan obriše sve za toj dan. Neče da ostavi jednog. Ako0 ne ide, može i ovako.

Još sada ne shvačam, kako je moguče zaobiči kontrolu IP-ja? Sa klikom sve se upiše u tablicu. Sa poslednjim posjetom se prvo provjeri dali danas več postoji ovaj ip. Ako postoji forma se ne pokazuje, a ja imam upise po 5 na isti sekund.

Dario

  • Global Moderator
  • *****
  • Postova: 1.086
  • Karma: 32
  • Web/Joomla Developer
    • Profil
    • dBlaze
Odg: Mysql + PHP pomoč
« Odgovori #6 : 04. Rujan 2014, 08:16 »
E, ovo radi kako treba. Ima još jednu manju grešku.
Ako pronađe 2 ili više IP-ja na jedan dan obriše sve za toj dan. Neče da ostavi jednog. Ako0 ne ide, može i ovako.

Mislam da ovaj "=" znak na kraju u WHERE-u treba promjeniti u "<" i to bi trebalo bit to....
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

  • Ozbiljan forumaš
  • ****
  • Postova: 381
  • Karma: 1
    • Profil
    • Radio Tomi
Odg: Mysql + PHP pomoč
« Odgovori #7 : 04. Rujan 2014, 10:33 »
Evo, ovakvo je rješenje:
$result = mysqli_query($con,"SELECT *
FROM xlpix_acepolls_votes
    INNER JOIN (
        SELECT MAX(ip) AS lastIp, option_id, date, MAX(id) as maxId
        FROM votes
        GROUP BY ip, DATE_FORMAT(DATE(votes.date), '%Y-%m-%d')
        HAVING COUNT(*) > 1
    ) duplicate ON duplicate.lastIp = votes.ip
where DATE_FORMAT(DATE(votes.date), '%Y-%m-%d') = DATE_FORMAT(DATE(duplicate.date), '%Y-%m-%d')
AND maxId > votes.id");

Dario hvala na pomoči!

Dario

  • Global Moderator
  • *****
  • Postova: 1.086
  • Karma: 32
  • Web/Joomla Developer
    • Profil
    • dBlaze
Odg: Mysql + PHP pomoč
« Odgovori #8 : 05. Rujan 2014, 08:08 »
No frk, zato smo tu :)
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

 

joomla_antivirus_logo