webForumDet fria alternativet

Inläsning och matchning

PHP

10 svar · 1 781 visningar · startad av SoulGod

Medlem sedan aug. 20051 200 inlägg
Frågan#1

Jag har en SQL-databas med ca 9000 poster i, med en himla massa kolumner...

Sen har jag en csv / excel fil med 3 kolumner (www - email - person id )...
I sql-database finns en likadan kolumn som heter person id ...

Jag vill kunna läsa in min csv / excel fil, och söka efter person id,
och såfort den hittar ett matchande person id,
så skall den uppdatera www och email från csv/excel >> SQL ...

Jag har för mig att det blir någon form av arraylösning,
men där tar mitt kunnande slut ...
någon som har ett tips i rätt riktning?

*** UPPDATERING ***
Har nu lyckats läsa in csv filen på min php fil, med följande kod...
Just nu skriver den ju tyvärr ut varje csv rad som en rad .. personid;email;www ...

Hur får jag den att "dela upp det" så att jag kan plocka varje del in i olika kolumner i SQL?


<?php
$host="127.0.0.1"; // Host name 
$username="*"; // Mysql username 
$password="*"; // Mysql password 
$db_name="*"; // Database name 
$tbl_name="table1"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$row = 1;
if (($handle = fopen("pargo-sql.csv", "r", ";")) !== FALSE) {
    while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
        $num = count($data);
        //echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            //echo $data[$c] . "<br />\n";
            $info = $data[$c];
            list($pid, $email, $www) = explode(";", $info);
            echo "<br />";
            
            mysql_query("UPDATE table1 SET www='$www' AND email='$email' WHERE pid='$pid'");
            
        }
    }
    fclose($handle);
}
?>
Medlem sedan juni 20014 290 inlägg
#2

Du borde kunna köra explode() funktionen för att dela upp raden.

Medlem sedan aug. 20051 200 inlägg
#3

Uppdaterade min kod-ruta där uppe ..

Jag tycker min kod ser bra ut , och när jag kör den får jag ej upp något felmeddelande,
men inget läggs till i databasen...

Någon aning?

Medlem sedan juni 20014 290 inlägg
#4

Var har du mysql_query()?

Kan ju vara bra att ha :)

Medlem sedan juni 20031 837 inlägg
#5

Du gör aldrig något anrop till databasen med din sql-fråga i $insert.

Medlem sedan aug. 20051 200 inlägg
#6

Förlåt - la tydligen inte in hela updaten, jag korrigerade koden precis när jag la upp den ... Uppdaterat ovan nu

Medlem sedan juni 20014 290 inlägg
#7

Om du kör

echo mysql_error();

efter mysql_querry() så ser du eventuella felmeddelanden.

jag brukar köra:

 update ... set aaa=1, bbb=2 ....

du har ett AND mellan, kommer inte ihåg om mysql gillar det.

Medlem sedan aug. 20051 200 inlägg
#8

Det kommer inte upp någonting alls .. den bara visar en vit sida som laddar, och sen har den laddat klart plötsligt, men inget visas trots mysql_error.

Jag testade nu att skriva ut all info enligt såhär:
echo "PID: ".$pid." - Email: ".$email." - WWW: ".$www."";
och all info skrivs ut ordentligt, så den har inga lässvårigheter från csv filen ..

Om jag ändrade till följande:
mysql_query("UPDATE table1 SET www='".$www."', email='".$email."' WHERE pid='".$pid."'");

( alltså lägger till ". ." runt orden ) så får jag upp att den får timeout, men vad jag har för mig så ska det ju bara vara ' ' runt?

Medlem sedan juni 20014 290 inlägg
#9

Om du skriver så här:

$query="UPDATE table1 SET www='$www', email='$email' WHERE pid='$pid'";
echo "<p>Query=$query</p>";
mysql_query($query);
echo mysql_error();

Då kan du 1) se om SQL uttrycket ser riktigt ut och 2) se om mysql_query() funktionen genererar något fel.

Medlem sedan juli 20023 617 inlägg
#10

Ett långskott kanske men...

$pid = trim($pid)
Medlem sedan mars 20034 471 inlägg
#11

Finns det ingen import-funktion i MySQL? Det borde det göra...

I så fall är den utan jämförelse enklaste lösningen att logga in i databasen, importera Excelfilen till en ny tabell som vi kan kalla ExcelUsers. Om den tabell du vill uppdatera heter MyUsers och bl.a. innehåller kolumnerna Email och WWW som ska uppdateras för personerna i filen, så kör du en UPDATE sats i databasen direkt:

UPDATE M
SET
  Email = E.Email,
  WWW = E.WWW
FROM
  MyUsers M
  INNER JOIN ExcelUsers E ON M.personID = E.PersonID

Inner join - ser till att bara de personid:n som finns både i MyUsers och i ExcelUsers uppdateras.

När detta är gjort kan du ta bort ExcelUsers.

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)