Avatar billede TiHs Nybegynder
12. maj 2014 - 12:39 Der er 48 kommentarer og
1 løsning

udtræk fra mærkelig tabel

Hej eksperter,
Jeg har følgende tabel som jeg gerne vil trække data ud fra. Tabellen er opsat som følger:

Navn          Datatype       
user_id          int(11)       
profile_key      varchar(100)   
profile_value varchar(255)   
ordering      int(11)       


user_id        profile_key            profile_value              ordering
872            profile.phone          "11223344"                  5
872            profile.spacer        ""                          6
872            profile.postal_code    "8362"                      4
872            profile.city          "H\u00f8rning"              3
872            profile.address2      ""                          2
872            profile.dob            ""                          7
872            profile.address1      "Skovg\u00e5rdsparken 91"    1

Hvordan laver jeg min Query select from user where ??

Jeg skulle gerne kunne echo så det står fint med:
Skovsgårdsvej 42
Hørning
8362
11223344

Mvh
Tim
Avatar billede TiHs Nybegynder
12. maj 2014 - 12:43 #1
Hov ... Skal stå Skovgårdsparken 91 :o)
Avatar billede repox Seniormester
12. maj 2014 - 12:54 #2
Det ser ud som om at profile value er json encoded (hvilket er lidt mærkeligt).

Prøve at json_decode() indholdet fra profile_value.
Avatar billede TiHs Nybegynder
12. maj 2014 - 13:09 #3
Hvordan skriver jeg den ?
Jeg skal kun bruge linierne:
profile.phone          "11223344"                 
profile.postal_code    "8362"                     
profile.city          "H\u00f8rning"             
profile.address1      "Skovg\u00e5rdsparken 91"   

Så hvordan fortæller jeg at jeg skal have disse data
ud og liste dem som ovenstående ... og det skal hentes for hver
gang der er et user_id
Avatar billede jakobdo Ekspert
12. maj 2014 - 13:23 #4
Du kunne jo løbe alle records igennem.
Og så laver noget "old_user_id" og så lave noget kode der reagere å user_id ændres ?
Avatar billede TiHs Nybegynder
12. maj 2014 - 14:20 #5
Min kode lige nu giver:

"Skovg\u00e5rdsparken 91""""H\u00f8rning""""11223344""8362"""

Og min query er:

$result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = 872") or die(mysql_error());

while($row = mysql_fetch_array( $result )) {

echo ($row['profile_value']);
Avatar billede jakobdo Ekspert
12. maj 2014 - 14:44 #6
Du kunne prøve:

$result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = 872") or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
  echo $row['profile_value']."<br/>";
}
Avatar billede jakobdo Ekspert
12. maj 2014 - 14:45 #7
Og som repox siger, det ligner noget json, så måske du kunne tage hver linje og bruge json_decode()

Noget ala:

while($row = mysql_fetch_array( $result )) {
  $json = json_decode($row['profile_value']);
  echo $json[?????]."<br/>";
}

Måske en print_r($json); kan fortælle hvad den indeholder efterfølgende. :o)
Avatar billede TiHs Nybegynder
12. maj 2014 - 15:26 #8
Perfekt ... det spiller med:

$json = json_decode($row['profile_value']);
echo "$json <br/>";
Avatar billede jakobdo Ekspert
12. maj 2014 - 15:31 #9
Så får du et svar.
Avatar billede jakobdo Ekspert
12. maj 2014 - 19:59 #10
Takker for point.
Avatar billede TiHs Nybegynder
13. maj 2014 - 15:26 #11
Hey Jakobdo, lige et tillægsspm.
Når jeg laver min echo, så laver den hver linie som et udtræk. Det vil sige når jeg smider:
$json = json_decode($row['profile_value']);
echo "$json <br/>";
laver den et kald for hver af:
872            profile.phone          "11223344"                  5
872            profile.spacer        ""                          6
872            profile.postal_code    "8362"                      4
872            profile.city          "H\u00f8rning"              3
872            profile.address2      ""                          2
872            profile.dob            ""                          7
872            profile.address1      "Skovg\u00e5rdsparken 91"    1

Det jeg skal have den til er at lave det som bare en string
med profile_value kollonnen kun. Dette skal jeg fordi jeg smider den i table hvor jeg også har en anden query med samme id (872) som viser mit et brugernavn.....

kan du fortælle mig hvad jeg gør her ? Har prøvet en del forskellige fetch_array's ....
Avatar billede jakobdo Ekspert
13. maj 2014 - 15:34 #12
Du har jo 7 rækker, hvor id = 872 giver dig alle data.
Du skulle måske hellere se på hvordan data kommer ind i første omgang?
Det ligner json, så du kunne evt. gemme hele json direkte i et felt.
Eller du kunne parse og gemme det "mere" korrekt.

id = 872
phone = 11223344
postal_code = 8362
osv...

Så kan du nøjes med en række, når du skal vise data.
Men jeg forstår måske ikke dit spørgsmål og hele dit formål, så jeg kan tage fejl.
Avatar billede TiHs Nybegynder
13. maj 2014 - 22:14 #13
Jamen det er json som du siger.

Det er joomla jeg har bygget siden op på. Og jeg syntes det er lidt svært at se hvordan "opret bruger" danner data i tabellen. Det var også der jeg startede for at finde koden der gemmer dem.

Men vil man ikke med et query fortælle at alle de rækker med id skal echo's som en enkelt post
med et linieskift ? .... kan man vælge de data der hedder profile.phone osv f.eks. ?

Det jeg er ved at skrive er en brugerliste hvor jeg har bruger data og så en tabel med profil data som er den der volder problemer.

Jeg vil så lave en tabel der danner en rækker pr. ID hvor bruger data med navn er i den ene <td> og så profil data med samme id i den anden <td> .....
Avatar billede jakobdo Ekspert
13. maj 2014 - 22:18 #14
Men de data du her viser, er det direkte data fra joomla eller har du trukket dem ud et sted fra ?
Avatar billede TiHs Nybegynder
13. maj 2014 - 22:21 #15
De her data:
Navn          Datatype       
user_id          int(11)       
profile_key      varchar(100)   
profile_value varchar(255)   
ordering      int(11)       


user_id        profile_key            profile_value              ordering
872            profile.phone          "11223344"                  5
872            profile.spacer        ""                          6
872            profile.postal_code    "8362"                      4
872            profile.city          "H\u00f8rning"              3
872            profile.address2      ""                          2
872            profile.dob            ""                          7
872            profile.address1      "Skovg\u00e5rdsparken 91"    1

De er udtrukket fra min sql tablen ja .....
Avatar billede jakobdo Ekspert
13. maj 2014 - 22:26 #16
Og hvad er det så præcist du ønsker? :o)
Avatar billede TiHs Nybegynder
13. maj 2014 - 22:36 #17
Jeg vil gerne lave en query fra tabellen som hedder villa_profile_users der vælger data fra profile_value og sortere dem efter user_id ....
Jeg vil så gerne kunne samle alle data fra hver user_id der vil være i tallen og så ligge dem sammen
og echo $profile_value som, og så skal den for hver samlet id lave "en" row .... håber du forstår :)
Avatar billede TiHs Nybegynder
13. maj 2014 - 22:52 #18
Det her virker i hvert fald ikke :o)

$user = mysql_query("SET NAMES utf8");

$user = mysql_query("SELECT name FROM villa_users ORDER BY id") or die(mysql_error());

$result = mysql_query("SELECT profile_value FROM villa_user_profiles ORDER BY user_id") or die(mysql_error());

$json = json_decode($row['result']);

while($row = mysql_fetch_array($user, $result)) {

extract ($row);

echo ($row['name']);
echo ($row['profile_value']);


giver:
Warning: mysql_fetch_array() expects parameter 2 to be long, resource given in /customers/6/8/1/villaholdet.com/httpd.www/plugins/system/sourcerer/helper.php(564) : runtime-created function on line 27
Avatar billede TiHs Nybegynder
13. maj 2014 - 23:02 #19
vil du iøvrigt have at jeg opretter et nyt spørgsmål med point som du kan få ?
Avatar billede jakobdo Ekspert
14. maj 2014 - 08:52 #20
Kan du ikke prøve at oprette en http://jsfiddle.net/ og lave en "dummy" af hvordan du ønsker dit output skal se ud?
For som jeg høre dig, så ønsker du en liste, der viser brugernavn og id. Og så kan man klikke på brugeren og få flere info eller tager jeg fejl ?
Avatar billede TiHs Nybegynder
14. maj 2014 - 09:37 #21
Der er som sagt to tabeller ... den ene indeholder brugers navn samt brugernavn.
Herfra trækker jeg bare 'navn'

Så er der en tabel der indeholder brugerens profil med addresse,  telefonnr osv ...
Herfra trækker jeg alt fra profile_value ....

Jeg har så med i phpkoden en tabel som skal hedde:

<table>
<tr>
<td 1>navn</td><td 2>profile_value</td>
</tr>
</table>

.. så td1 skal indeholder f.eks. Tim Sørensen og td2 skal indeholde profiloplysninger:
Skovsgårdsvej 42
Hørning
8362
11223344
Avatar billede jakobdo Ekspert
14. maj 2014 - 09:45 #22
Det er bestemt ikke optimalt, men prøv lige:

$user = mysql_query("SET NAMES utf8");

$user = mysql_query("SELECT id, name FROM villa_users ORDER BY id") or die(mysql_error());

echo '<table>';
while($row = mysql_fetch_assoc($user)) {
  echo '<tr><td>' . $row['name'] . '</td>';
  $result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = $row['id']") or die(mysql_error());
  echo '<td>';
  $temp = array();
  while($data = mysql_fetch_assoc($result)) {
    $json = json_decode($row['data']);
    $temp[] = $json;
  }
  echo implode("<br>",$temp);
  echo '</td>';
}
echo '</table>';
Avatar billede TiHs Nybegynder
14. maj 2014 - 10:19 #23
Den giver:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /customers/6/8/1/villaholdet.com/httpd.www/plugins/system/sourcerer/helper.php(564) : runtime-created function on line 23 Fatal error: Function name must be a string in /customers/6/8/1/villaholdet.com/httpd.www/plugins/system/sourcerer/helper.php on line 569
Avatar billede jakobdo Ekspert
14. maj 2014 - 10:21 #24
Nu er jeg godt nok god, men min kode har ikke 564 og 569 linjer.
Så jeg tror du må hjælpe mig lidt...
Avatar billede TiHs Nybegynder
14. maj 2014 - 10:39 #25
haha ... nej, det er fordi den jo ligger i joomla :) ... laver den lige i et script for sig selv
Avatar billede TiHs Nybegynder
14. maj 2014 - 10:43 #26
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /customers/6/8/1/villaholdet.com/httpd.www/administrator/testuser.php on line 13
Avatar billede jakobdo Ekspert
14. maj 2014 - 10:46 #27
Mit bud er det er denne linje:

$result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = $row['id']") or die(mysql_error());

ret lige til:

$result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = ".$row['id'].";") or die(mysql_error());
Avatar billede TiHs Nybegynder
14. maj 2014 - 10:59 #28
Det begynder at ligne noget, men se lige http://www.villaholdet.com/administrator/testuser.php .... navn er der nu, men mangler den tunge data :o)
Avatar billede jakobdo Ekspert
14. maj 2014 - 11:04 #29
$json = json_decode($row['data']); skal jo selvfølgelig være:

$json = json_decode($row['profile_value']);
Avatar billede TiHs Nybegynder
14. maj 2014 - 11:14 #30
Viser stadig kun navne ...

ser sådan ud nu:

<?php

mysql_connect("localhost","USER_NAME","KODE");
mysql_select_db("DATABASE_com");

$user = mysql_query("SET NAMES utf8");

$user = mysql_query("SELECT id, name FROM villa_users ORDER BY id") or die(mysql_error());

echo '<table>';
while($row = mysql_fetch_assoc($user)) {
  echo '<tr><td>' . $row['name'] . '</td>';
  $result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = ".$row['id'].";") or die(mysql_error());
  echo '<td>';
  $temp = array();
  while($data = mysql_fetch_assoc($result)) {
    $json = json_decode($row['profile_value']);
    $temp[] = $json;
  }
  echo implode("<br>",$temp);
  echo '</td>';
}
echo '</tr>';
echo '</table>';

?>
Avatar billede jakobdo Ekspert
14. maj 2014 - 11:16 #31
Test lige denne kode:

<?php

mysql_connect("localhost","USER_NAME","KODE");
mysql_select_db("DATABASE_com");

$user = mysql_query("SELECT id, name FROM villa_users ORDER BY id") or die(mysql_error());

echo '<table>';
while($row = mysql_fetch_assoc($user)) {
  echo '<tr><td>' . $row['name'] . '</td>';
  $result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = ".$row['id'].";") or die(mysql_error());
  echo '<td>';
  $temp = array();
  while($data = mysql_fetch_assoc($result)) {
    $json = json_decode($row['profile_value']);
    $temp[] = $json;
    echo $json;
  }
  //echo implode("<br>",$temp);
  echo '</td>';
}
echo '</tr>';
echo '</table>';

?>
Avatar billede TiHs Nybegynder
14. maj 2014 - 11:16 #32
Er det ikke her den går galt ?
WHERE user_id = ".$row['id']

hvad er row id ?
Avatar billede TiHs Nybegynder
14. maj 2014 - 11:22 #33
sidste kode giver:

Tim S&#65533;rensen   
Peter Hansen   
Thomas Foli   
Jacob
Avatar billede jakobdo Ekspert
14. maj 2014 - 11:25 #34
Er der nogen mulighed for at få direkte adgang til din kode?
Pt virker det ikke til vi kommer tættere på mål. :o)
Avatar billede TiHs Nybegynder
14. maj 2014 - 11:32 #35
Vi kom da meget tæt på ... vi får bare ingen data ud med profile_value lige nu :o)
Hvilken del af koden vil du skulle bruge adgang til ?
Avatar billede TiHs Nybegynder
14. maj 2014 - 11:33 #36
D kan se på testuser siden at det ellers ser fint ud, bare uden profil-data
Avatar billede jakobdo Ekspert
14. maj 2014 - 11:36 #37
Har du noget msn, icq, gtalk etc... ?

fang mig på jakobdo (at) gmail -dot- com
Avatar billede TiHs Nybegynder
14. maj 2014 - 11:37 #38
hvis jeg retter i koden fra

echo $json;

til

echo '$json';

så giver den:

Tim Sørensen    $json$json$json$json$json$json$json
Peter Hansen    $json$json$json$json$json$json$json
Thomas Foli    $json$json$json$json$json$json$json
Jacob            $json$json$json$json$json$json$json
Avatar billede jakobdo Ekspert
14. maj 2014 - 11:48 #39
Det betyder den får data fra sql nummer "2".
Avatar billede TiHs Nybegynder
14. maj 2014 - 12:15 #40
Sidder iøvrigt på mit arbejde og her vil messenger ikke rigtig køre. Prøver med ICQ som også volder lidt problemer :)
Avatar billede jakobdo Ekspert
14. maj 2014 - 12:36 #41
Hvor ligger din kode ?
Online eller på en arbejdsserver ?
Eller kan du smide login via min email.
ret evt. kodeord til ftp, så kan du rette retur, når jeg har fikset koden. :o)
Avatar billede TiHs Nybegynder
14. maj 2014 - 13:10 #42
Så fik jeg styr på min ftp.
Det er ftp.villaholdet.com
bruger villaholdet.com
kode admintest
Avatar billede TiHs Nybegynder
14. maj 2014 - 13:10 #43
og hermed rettet igen ... sender lige en ny til din email :o)
Avatar billede TiHs Nybegynder
14. maj 2014 - 13:16 #44
tjek din mail :o)
Avatar billede jakobdo Ekspert
14. maj 2014 - 13:28 #45
Se så..

Den store fejl var denne linje:

$json = json_decode($data['profile_value']);

Den hed før $row og skulle selvfølgelig hedde $data.

Jeg har lige tilføjet lidt ekstra kode, så den tjekker om $json er tom eller ej.

Så fuld kode er nu:

<?php

mysql_connect("localhost","villaholdet_com","kNNZyHMC");
mysql_select_db("villaholdet_com");
mysql_query("SET NAMES utf8");

$user = mysql_query("SELECT id, name FROM villa_users ORDER BY id") or die(mysql_error());

echo '<table border="1">';
while($row = mysql_fetch_assoc($user)) {
  echo '<tr><td>' . $row['name'] . '</td>';
  $result = mysql_query("SELECT profile_value FROM villa_user_profiles WHERE user_id = ".$row['id'].";") or die(mysql_error());
  echo '<td>';
  $temp = array();
  while($data = mysql_fetch_assoc($result)) {
    $json = json_decode($data['profile_value']);
    if(strlen($json)>0)
      $temp[] = $json;
  }
  echo implode("<br>",$temp);
  echo '</td>';
}
echo '</tr>';
echo '</table>';

?>
Avatar billede TiHs Nybegynder
14. maj 2014 - 13:53 #46
jaaaaa men altså. Ser jo ud som de skal nu :o) ... godt du smed den ekstra kode i, for de tomme linier er jo unødvendige :o)
Tusinde tak for hjælpen. Skal jeg oprette et spm med point ?
Avatar billede jakobdo Ekspert
14. maj 2014 - 13:58 #47
Nej, det er sgu lige meget. :o)
Håber du lærte noget...
Avatar billede TiHs Nybegynder
14. maj 2014 - 14:19 #48
Det gjort jeg bestemt. Så nu skal jeg bare have smidt noget css class på den tabel og så den i vinkel. Så kan jeg komme videre :o)

tak igen
Avatar billede jakobdo Ekspert
14. maj 2014 - 14:20 #49
selv tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester