Avatar billede para7 Nybegynder
06. januar 2011 - 17:57 Der er 18 kommentarer og
1 løsning

Kun vise een række af hver person fra liste

Jeg har forenklet set en tabel, der er en liste over brugeres bookings. Jeg lister fra denne tabel for at vise hvem der tilbyder booking. Brugerne har et unikt brugernavn og når jeg kører do-while-løkken forsøger jeg med en if-sætning at udelukke de ekstra listninger fra hver bruger.
Jeg har prøvet følgende, som jo ikke virker. Jeg vil gerne holde fast i at bruge if-sætning, da jeg har færdiggjort min SQL sætning og ikke vil forstyrre i den.

Jeg har inde i løkken forsøgt med:


$userid_repeat = $row["userid"];
if($row["userid"]!=$userid_repeat){

echo $row["username"]."<br>";

}
Avatar billede repox Seniormester
06. januar 2011 - 18:06 #1
Jeg kan ikke se hvad der skulle være i vejen med at modificere SQL sætningen? Det ville da være mere effektivt og så slipper du for at lave molbo kode - men det er selvfølgelig dit eget valg.

Men derfor vil jeg gerne se din SQL sætning, for at se hvor simpelt jeg kan forsøge at lave det.
Og den omkringliggende while() løkke for $row ville også være rar.
Avatar billede para7 Nybegynder
06. januar 2011 - 18:37 #2
det lyder godt at du er frisk på det, for det jeg er kørt noget fast i det må jeg sige. Her er udskrevet SQL sætning:

SELECT properties.*, booked.* FROM properties, booked WHERE properties.case_id = booked.case_id_b AND properties.active = 'yes' AND booked.active = 'yes' AND ('2010-12-01' < booked.arrival AND '2011-01-05' < booked.arrival ) OR ('2010-12-01' > booked.departure AND '2011-01-05' > booked.departure )AND properties.distance_to_beach <='1' AND properties.distance_to_town_center <='2'
Avatar billede para7 Nybegynder
06. januar 2011 - 18:41 #3
$result = mysql_query($sql)
    or die("SELECT Error: ".mysql_error());
    if ($row = mysql_fetch_array($result)) {
        do {

                    [indhold udskrives]

        } while($row = mysql_fetch_array($result));

    }else{
            echo "Nothing found, please search again with less criteria...";
    }
    mysql_close($link);
Avatar billede repox Seniormester
06. januar 2011 - 19:26 #4
Måske bare en GROUP BY?
SELECT 
    properties.*,
    booked.*
FROM
    properties,
    booked
WHERE
    properties.case_id = booked.case_id_b
AND
    properties.active = 'yes'
AND
    booked.active = 'yes'
AND
    (
        '2010-12-01' < booked.arrival
    AND
        '2011-01-05' < booked.arrival
    )
OR
    (
        '2010-12-01' > booked.departure
    AND
        '2011-01-05' > booked.departure
    )
AND
    properties.distance_to_beach <='1'
AND
    properties.distance_to_town_center <='2'
GROUP BY
    booked.userid
Avatar billede tjens Nybegynder
06. januar 2011 - 20:29 #5
Linien der gemmer sidst skrevne user, skal vel først udføres inde i if'en?

if($row["userid"]!=$userid_repeat){

    echo $row["username"]."<br>";
    $userid_repeat = $row["userid"];

}
Avatar billede para7 Nybegynder
06. januar 2011 - 21:14 #6
OK, jeg har tilføjet som du foreslog i slutningen og med det rigtige id felt:

GROUP BY
    booked.case_id_b


MEEN der bliver kun listet første record i booked tabellen.
Avatar billede para7 Nybegynder
06. januar 2011 - 21:18 #7
Udskrevet SQL streng:

SELECT properties.*, booked.* FROM properties, booked WHERE properties.case_id = booked.case_id_b AND properties.active = 'yes' AND booked.active = 'yes' AND ('2010-12-01' < booked.arrival AND '2011-01-05' < booked.arrival ) OR ('2010-12-01' > booked.departure AND '2011-01-05' > booked.departure) AND properties.distance_to_beach <='1' AND properties.distance_to_town_center <='2' GROUP BY booked.case_id_b
Avatar billede repox Seniormester
06. januar 2011 - 21:22 #8
Kan du lave et data/struktur dump jeg kan teste på?
Avatar billede para7 Nybegynder
07. januar 2011 - 10:20 #9
repox, kan du specificere? Er det en simplificeret kode med database du ønsker?
Avatar billede para7 Nybegynder
07. januar 2011 - 10:22 #10
Ellers måp det da kunne lade sig gøre med molbometoden. Måske med session for at eliminere de ekstra visninger.
Avatar billede repox Seniormester
07. januar 2011 - 10:31 #11
Nej, bare opbygning af de database tabeller som det drejer sig om og nogle testdata fra dem begge, så jeg lige kan prøve udtrækket af.
Avatar billede para7 Nybegynder
07. januar 2011 - 10:42 #12
Opbygningen af db tabeller, simplificeret:

properties:
id  name  case_id 

booked:
id  case_id_b  arrival  departure

Testdata fra dem, hvad skal det være?

Det er vist ikke det du mener.
Avatar billede para7 Nybegynder
07. januar 2011 - 10:45 #13
Kan du ikke hurtigt lave en testside med database for at teste det med de oplysninger jeg har givet? Det er vel et typisk setup.
Avatar billede para7 Nybegynder
07. januar 2011 - 10:47 #14
Jeg kan ikke afsløre url på sitet her, da det jo ikke er åbent endnu. Men via mail...
Avatar billede para7 Nybegynder
07. januar 2011 - 11:07 #15
repox:
HOV. Jeg manglede at indsætte en bruger i booked tabellen. Og nu virker det sådan set med dit forslag. Når jeg søger på et senere ledigt tidspunkt på året listes de ledige dog ikke rigtigt, så jeg må bare prøve at hitte ud af det. Selvfølgelig hvis du har ideer til dato selectionen. Ellers åbner jeg et spørgsmål med en simpel molbo-kode til at eliminere de ekstra listninger...

Send lige svar for point repox.
Avatar billede repox Seniormester
07. januar 2011 - 11:25 #16
Prøv at indkapsle din OR klausul:
SELECT 
    properties.*,
    booked.*
FROM
    properties,
    booked
WHERE
    properties.case_id = booked.case_id_b
AND
    properties.active = 'yes'
AND
    booked.active = 'yes'
AND
(
    (
        '2010-12-01' < booked.arrival
    AND
        '2011-01-05' < booked.arrival
    )
OR
    (
        '2010-12-01' > booked.departure
    AND
        '2011-01-05' > booked.departure
    )
)
AND
    properties.distance_to_beach <='1'
AND
    properties.distance_to_town_center <='2'
GROUP BY
    booked.case_id_b
Avatar billede para7 Nybegynder
07. januar 2011 - 11:35 #17
Pyyha, det var en gyser. Men vi klarede den. Tak, din kode virker nu som den skal, kan ikke finde fejlvisninger mere :)
Avatar billede para7 Nybegynder
07. januar 2011 - 11:38 #18
Det eneste det ser ud til du har ændret er at fjerne ekstra paranteser i den blå opstilling, går jeg ud fra.
Tak for nu :)
Avatar billede para7 Nybegynder
07. januar 2011 - 11:40 #19
Vrøvl, jeg mener omvendt, jeg har indkapslet det nu, men ser ingen ændring, men det er sikkert godt med indkapslingen.
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