Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Warunek w tablicy row w przypadku wykrycia duplikatów
-danieljoz-
post
Post #1





Goście







Witam napisałem skrypt w php który ma pobierac dane z jednych tabel a nastepnie zapisywac je w innej tabeli przykład skryptu wygląda tak
  1. #!/usr/bin/php-cgi
  2. <?php
  3. $con = mysql_connect("localhost","root","123qwe");
  4.  
  5. mysql_select_db("lms", $con);
  6. mysql_query("TRUNCATE TABLE radcheck");
  7. mysql_query("TRUNCATE TABLE radreply");
  8.  
  9. $result = mysql_query("select n.id AS nid, n.name, inet_ntoa(n.ipaddr) AS ipaddr, n.passwd, n.chkmac, m.mac, c.id AS cid
  10. FROM nodes n
  11. JOIN macs m ON (m.nodeid = n.id)
  12. JOIN customers c ON (c.id = n.ownerid)");
  13.  
  14. while ($row = mysql_fetch_array($result)) {
  15.  
  16.  
  17. if ($row["mac"] == "00:00:00:00:00:00")
  18. {
  19. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  20. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  21. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  22. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  23. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  24. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  25. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  26. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  27. }
  28. elseif ($row["chkmac"] == "0")
  29. {
  30. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  31. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  32. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  33. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  34. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  35. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  36. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  37. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  38. }
  39. else
  40. {
  41. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"calling-station-id\", \"==\", \"$row[mac]\")");
  42. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  43. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  44. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  45. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  46. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  47. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  48. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  49. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  50. }
  51. }
  52. ?>


Zapytanie zwraca mi taką wartosc:

  1. 1 KLIENT1 192.168.0.2 zrqRKZDtYSYFjDFF 1 00:00:00:00:00:00 1
  2. 2 KLIENT2 192.168.0.104 dino1988 1 00:00:00:00:00:00 2
  3. 6 KLIENT3 192.168.0.8 sEgClbb2CRX6N0p6 1 00:00:00:00:00:00 6
  4. 9 KLIENT4 192.168.0.70 9wXDK6u3BK6cgHOZ 1 00:00:00:00:00:00 9
  5. 11 KLIENT5 192.168.0.13 yE2jt527Gz7C572w 1 00:00:00:00:00:00 11
  6. 17 KLIENT6 192.168.0.19 OYsFBSpWybFWqyHh 1 00:00:00:00:00:00 17
  7. 20 KLIENT7 192.168.0.62 M3iR3tcBI5kXFws4 1 00:00:00:00:00:00 20
  8. 28 KLIENT8 192.168.0.30 4v1W5urDIRJIELie 1 00:00:00:00:00:00 28
  9. 31 KLIENT9 192.168.0.33 jSaz8lELBY8FuFud 1 00:00:00:00:00:00 31
  10. 33 KLIENT10 192.168.0.35 GEOlZdS4eucIYr2j 1 00:00:00:00:00:00 33
  11. 38 KLIENT11 192.168.0.40 garmonbozia123 1 00:00:00:00:00:00 38
  12. 39 KLIENT12 192.168.0.41 u0cBVaRK67VC6DOf 1 00:00:00:00:00:00 39
  13. 48 KLIENT13 192.168.0.157 arEAFljJ8puEDPl3 1 00:00:00:00:00:00 45
  14. 49 KLIENT14 192.168.0.137 dino1988 1 00:00:00:00:00:02 2
  15. 49 KLIENT14 192.168.0.137 dino1988 1 00:00:00:00:00:01 2



Jak widac skrypt wyciąga mi 2x klienta14 róznią się jedynie ostatnim rekordem

więc przy dodaniu do tabeli radcheck klienta14 wyglada to tak:

  1. 27 KLIENT14 Password == dino1988
  2. 28 KLIENT14 NAS-IP-Address := 192.168.0.1
  3. 29 KLIENT14 calling-station-id == 00:00:00:00:00:01
  4. 30 KLIENT14 Password == dino1988



Chciałbym dodac warunek if który sprawdzał by czy wynik w petli row np
$row[name] powtarza się to w tedy kiedy warunek zostanie spelniony ma dodac rekordy do bazy radcheck w nastepujacy sposob:

  1. 27 KLIENT14 Password == dino1988
  2. 28 KLIENT14 NAS-IP-Address := 192.168.0.1
  3. 29 KLIENT14 calling-station-id == 00:00:00:00:00:02
  4. 30 KLIENT14 calling-station-id == 00:00:00:00:00:01
  5. 31 KLIENT14 Password == dino1988


czyli dodac jeden raz wpis tylko z 2x rekordem calling-station-id z 1 i 2 mackiem

a nie jak to teraz jest w taki sposob

  1. 28 KAMIL2 calling-station-id == 00:00:00:00:00:02
  2. 29 KAMIL2 Password == dino1988
  3. 30 KAMIL2 NAS-IP-Address := 192.168.0.1
  4. 31 KAMIL2 calling-station-id == 00:00:00:00:00:01
  5. 32 KAMIL2 Password == dino1988
  6. 33 KAMIL2 NAS-IP-Address := 192.168.0.1


bardzo prosiłbym o wskazówki

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
_Borys_
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

Ostrzeżenie: (0%)
-----


MYSQL DISTINCT
Go to the top of the page
+Quote Post
-danieljoz-
post
Post #3





Goście







Witam nie dokońca o to mi chodziło bo teraz jeżeli klient dany sie duplikuje to całkowicie kasuje mi rekord z jego mac nie można zrobic tego na zasadzie warunku if ?
Go to the top of the page
+Quote Post
dan-j2
post
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.05.2009

Ostrzeżenie: (0%)
-----


Ktoś zna odpowiedź na to pytanie ?

Naprawdę nikt nie zna odpowiedzi ?
Go to the top of the page
+Quote Post
Mary$
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 19.02.2007
Skąd: 3city

Ostrzeżenie: (0%)
-----


Jako pierwszego IF'a dodaj to:
  1. $tmp = mysql_query('SELECT count(*) FROM radreply WHERE name='.$row[name]$row[cid]);
  2. $tmp = mysql_fetch_row($tmp);
  3. if ($tmp[0] > 0) // jeżeli istnieje już rekord tego klienta, to wykonaj:
  4. {
  5. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"calling-station-id\", \"==\", \"$row[mac]\")");
  6. }
  7. else if ...


to chyba powinno Ci pomóc (IMG:style_emoticons/default/smile.gif)

Po prostu jeżeli masz już informacje o tym kliencie w tabeli radcheck, to dodajesz tylko rekord calling-station-id?
Go to the top of the page
+Quote Post
dan-j2
post
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.05.2009

Ostrzeżenie: (0%)
-----


Dokładnie o to chodzi dam znac czy się udało (IMG:style_emoticons/default/smile.gif)

pozdrawiam

Witam zrobiłem to w taki sposób

  1. #!/usr/bin/php-cgi
  2. <?php
  3. $con = mysql_connect("localhost","root","123qwe");
  4.  
  5. mysql_select_db("lms", $con);
  6. mysql_query("TRUNCATE TABLE radcheck");
  7. mysql_query("TRUNCATE TABLE radreply");
  8.  
  9. $result = mysql_query("select n.id AS nid, n.name, inet_ntoa(n.ipaddr) AS ipaddr, n.passwd, n.chkmac, m.mac, c.id AS cid
  10. FROM nodes n
  11. JOIN macs m ON (m.nodeid = n.id)
  12. JOIN customers c ON (c.id = n.ownerid)");
  13.  
  14. while ($row = mysql_fetch_array($result)) {
  15.  
  16.  
  17. $tmp = mysql_query("SELECT count(*) FROM nodes WHERE name='.$row[name]$row[cid].'");
  18. $tmp = mysql_fetch_row($tmp);
  19. if ($tmp[0] > 0) // jeżeli istnieje już rekord tego klienta, to wykonaj:
  20. {
  21. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"calling-station-id\", \"==\", \"$row[mac]\")");
  22. }
  23. elseif ($row["mac"] == "00:00:00:00:00:00")
  24. {
  25. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  26. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  27. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  28. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  29. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  30. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  31. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  32. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  33. }
  34. elseif ($row["chkmac"] == "0")
  35. {
  36. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  37. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  38. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  39. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  40. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  41. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  42. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  43. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  44. }
  45. elseif ($row["chkmac"] == "0")
  46. {
  47. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  48. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  49. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  50. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  51. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  52. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  53. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  54. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  55. }
  56. else
  57. {
  58. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"calling-station-id\", \"==\", \"$row[mac]\")");
  59. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"Password\", \"==\", \"$row[passwd]\")");
  60. mysql_query("INSERT INTO radcheck VALUES (NULL, \"$row[name]$row[cid]\", \"NAS-IP-Address\", \":=\", \"192.168.0.1\")");
  61. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Address\", \":=\", \"$row[ipaddr]\")");
  62. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Service-Type\", \":=\", \"Framed-User\")");
  63. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Protocol\", \":=\", \"PPP\")");
  64. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-IP-Netmask\", \"=\", \"255.255.255.255\")");
  65. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Routing\", \":=\", \"Broadcast-Listen\")");
  66. mysql_query("INSERT INTO radreply VALUES (NULL, \"$row[name]$row[cid]\", \"Framed-Compression\", \":=\", \"Van-Jacobsen-TCP-IP\")");
  67. }
  68. }
  69. ?>



lecz niestety po tym zabiegu wogole mi nie dodaje mackow domyslilem sie ze chodzi o to zeby zapytanie sprawdzalo z tabeli nodes gdzie wszystkie zmienne sa pobierane a nastepnie zapisywane do radcheck
Go to the top of the page
+Quote Post
Mary$
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 19.02.2007
Skąd: 3city

Ostrzeżenie: (0%)
-----


Pgólnie ja to widzę tak - chcesz przetwarzać dane z tabeli nodes i zapisywać do radcheck i radreply, tak?

Zatem musisz sprawdzić, czy masz jakikolwiek rekord w radcheck lub radreply dotyczący danego klienta, a nie sprawdzać w nodes, bo żeby było śmieszniej, to zapytanie:
  1. SELECT count(*) FROM nodes WHERE name=$row[name]$row[cid]

zawsze zwróci wartość 0, bo nazwa klienta w nodes jest inna, niż w radcheck i radreply, prawda? (IMG:style_emoticons/default/smile.gif)

Ten select powinien wyszukiwać, czy w tabeli radcheck lub radreply (do wyboru) jest jakikolwiek rekord, w którym wartość kolumny, do której zapisujesz nazwę klienta (np. Klient12, Klient01) jest równa aktualnemu $row[name]$row[cid].

Tak na mój rozumek (IMG:style_emoticons/default/smile.gif)

Ten post edytował Mary$ 19.02.2013, 00:17:32
Go to the top of the page
+Quote Post
dan-j2
post
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.05.2009

Ostrzeżenie: (0%)
-----


Witam w tym problem że to nie zadziała gdyż tabele radcheck i radreply sa przy każdym wywołaniu skryptu czyszczone poprzez truncate a warunek jest wywoływany jeszcze zanim coś do tych tabel zostanie dodane ale mimo wszystko zrobiłem tak jak pisałeś lecz niestety nic to nie dało dalej sa dodawane wpisy tak jak były czyli jak mac sa 2 różne w tabeli dla tego klienta to wpis wyglada tak:

  1. | 281 | KLIENT14 | calling-station-id | == | 00:00:00:00:00:01 |
  2. | 282 | KLIENT14 | Password | == | dino1988 |
  3. | 283 | KLIENT14 | NAS-IP-Address | := | 192.168.0.1 |
  4. | 288 | KLIENT14 | calling-station-id | == | 00:00:00:00:00:03 |
  5. | 289 | KLIENT14 | Password | == | dino1988 |
  6. | 290 | KLIENT14 | NAS-IP-Address | := | 192.168.0.1 |


Zamiast zrobic to tak

  1. | 281 | KLIENT14 | calling-station-id | == | 00:00:00:00:00:01 |
  2. | 288 | KLIENT14 | calling-station-id | == | 00:00:00:00:00:03 |
  3. | 282 | KLIENT14 | Password | == | dino1988 |
  4. | 283 | KLIENT14 | NAS-IP-Address | := | 192.168.0.1 |


Ten post edytował dan-j2 19.02.2013, 00:29:10
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:29