Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Warunek w tablicy row w przypadku wykrycia duplikatów
Forum PHP.pl > Forum > Przedszkole
danieljoz
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
_Borys_
MYSQL DISTINCT
danieljoz
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 ?
dan-j2
Ktoś zna odpowiedź na to pytanie ?

Naprawdę nikt nie zna odpowiedzi ?
Mary$
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 smile.gif

Po prostu jeżeli masz już informacje o tym kliencie w tabeli radcheck, to dodajesz tylko rekord calling-station-id?
dan-j2
Dokładnie o to chodzi dam znac czy się udało 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
Mary$
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? 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 smile.gif
dan-j2
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 |
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.