Avatar billede lojmann Nybegynder
10. april 2003 - 16:51 Der er 4 kommentarer og
2 løsninger

HASTER:Længere og dynamisk SQL query.. Laves ud fra en masse valg

Hej,

Jeg har et problem med at få sammensat noget kode, som ud fra nogle valg en bruger gør - konstruere en SQL query og viser noget data fra SQL-databasen.

Hele senariet er som flg.

1. Siden laves (dynamsik) og viser en dropdown box hvor man kan vælge "E-mail", "Mobil" eller "Begge". En anden dropdown box hvor man kan vælge "Dreng", "Pige" eller "Begge".
Der er også to felter som hedder "fra år" og "til år".
2. På samme side bliver der, dynamisk, lavet en masse checkboxe hvor man kan sætte kryds i som man ønsker det.
3. Når der trykkes send, skal der genereres en SQL sætning som finder de valgte ting frem i en database.

SQL strukturen er som flg.

Tabel: interesser
id  (int) - Unikt ID
navn  (varchar) - F.eks. "Hus og Have"
webnavn  (varchar) - F.eks. "husoghave"

Tabel: profiler
id  (int) - Unikt ID
fornavn  (varchar) - F.eks. Thomas
efternavn (varchar) - F.eks. Jørgensen
kon  (varchar) - F.eks. dreng
email  (varchar) - F.eks. secret@pornohouse.dk
mobil  (int) - F.eks. 12345678
kode  (varchar) - F.eks. ********

Tabel: profilinteresser
id  (int) - Unikt ID
pid  (int) - Svare til den tilknyttet profils ID
iid  (int) - Svare til ID i tabelen interesser
har  (int) - Er bare 1, kunne undværes - da jeg ikke bruger den (endnu?)

Man skal så kunne søge på f.eks.

Køn: Dreng
Født mellem: 1970-1980
Har mobil
Interessere sig for: "Hus og Have", "PDA og Mobiltelefoner" samt "Familieøkonomi"

Så skal den lave en liste med alle de profiler som opfylder dette ønske.
Hvis man har krydset af at det skal være en uden mobil, må den gerne tage dem med som har en mobil, men skal bare kun skrive e-mail adressen ud på personen... (til brug ved mailingliste etc.)

Håber der er nogle der kan hjælpe, flere point gives gerne!

/Løjmann
Avatar billede Slettet bruger
10. april 2003 - 17:31 #1
Noget i den stil:

select prof.* from profilinteresser pint, profiler prof, interesser int where prof.kon='Dreng' and (prof.alder<=1970 or prof.alder>=1980) AND mobil IS NOT NULL and pint.pid=prof.id and (int.navn='Hus og Have' OR int.navn='PDA og Mobiltelefoner' OR int.navn='Familieøkonomi') AND pint.iid=int.id

Går ud fra at du har en række kaldet alder i tabellen profiler
Går ud fra at standard værdien for mobiltelfons nummer er NULL
Avatar billede lojmann Nybegynder
10. april 2003 - 17:54 #2
Ups ja, alder er med i profiler, det glemte jeg... Din Query ser også ud som jeg cirka havde gættet på den skulle se ud, men;

Jeg skal bruge noget PHP kode, som kan lave den ud fra nogle variabler...

Alle de checkbox'e som bliver vist og som man kan sætte X i, bliver lavet ud fra denne her kode:

$tael = 0;
$query = mysql_query("SELECT navn, webnavn, id FROM interesser ORDER BY navn");
while ($row = mysql_fetch_array($query)) {
if ($tael == "0") {
echo ("    <tr>\n");
}
elseif ($tael % 3 == "0") {
echo ("    </tr>\n");
echo ("    <tr>\n");
}
$id = $row["id"];
$navn = stripslashes($row["navn"]);
$webnavn = $row["webnavn"];
echo ("      <td width=\"250\" valign=\"top\"><input type=\"checkbox\" name=\"$webnavn\" value=\"$navn\">$navn</td>\n");
$tael++;

Hvis man sætter X i flere boxe så skal der kun vises de profiler, som har et entry i profilinteresser hvor "iid" passer det det "id" som interessen har...

Det skal bruges til at lave en liste over folk som har specielle interesser.

Håber det giver mening?
Avatar billede Slettet bruger
11. april 2003 - 00:04 #3
En lille rettelse til dig så:
I den ovenstående løkke:
echo ("      <td width=\"250\" valign=\"top\"><input type=\"checkbox\" name=\"int_$tael\" value=\"$id\">$navn</td>\n");
Efter løkken:
echo '<input type="hidden" value="'.$tael.'" name="intnumber"/>

Hvor du laver dit sql kald... går udfra der postes!
$intid = array();
for($i=0;$i<$_POST[intnumber];$i++)
{
    if(isset($_POST["int_$i"])
    {
          $intid[]=$_POST["int_$i"];
    }
}

$intsql = "(int.id=".implode(" OR int.id=",$intid).")";

Håber du kan se pointen!?
Avatar billede lojmann Nybegynder
14. april 2003 - 08:16 #4
regin -> Tak, hvis du svare giver jeg gerne lidt point...

alle -> Jeg har fået løst problemet, så svar ikke mere *g*
Avatar billede Slettet bruger
14. april 2003 - 11:09 #5
Hvis jeg da har fortjent det!?

Hvad blev din løsning?
Avatar billede lojmann Nybegynder
14. april 2003 - 12:35 #6
Bare lidt alm SELECT med nogle LIKE'er i... Og forinden lidt IF/ELSE hvor den sætter nogle variabler som den skal paste ind i min SQL Query...
Det var jo mega nemt, når man lige fik et par dage uden computer og stress...

Grunden til du får point, er pga. din lille rettelse, måske ikke 20 point værd vil nogle sige, men skidt - jeg er mega lykkelig over det virker :)
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