webForumDet fria alternativet

Platsbokning på bästa sett?

PHPur PHP

12 svar · 1 141 visningar · startad av Hamatzu

Medlem sedan mars 2005232 inlägg
Frågan#1

Hej!

Jag håller nu på med att göra ett platsbokningssytem till ett lan som vi ska ha. Det jag skulle vilja fråga är hur man ska göra detta på bästa sett. Jag har spawnat lite på det och jag har en tabell med lite generell information om lanet. T.ex hur många platser som finns, namn på lanet och hur många cols/rows själva kartan för platsbokningen ska vara.

Sedan tänkte jag att man har en tabell som skapar alla cols/rows till kartan genom att beräkna det från cols/rows i första tabellen. Sedan loopar man ut alla platser, med hjälp av hur många cols/rows det finns i första tabellen.

Sen är det inte tänkt att alla platser inte ska vara en plats utan det ska kunna vara något annat, t.ex en vägg eller nåt så att man kan bygga upp en karta. Sedan så kan man välja om varje position kan vara en plats eller inte.

Kom med förslag och liknande, eller om ni gjort nåt liknande innan på hur man gör det bäst? :birp

Medlem sedan mars 2005232 inlägg
#2

Jag har nu kommit så långt så att jag har en tabell med generell information om lanet, där cols och rows finns med. Sedan en tabell som har antalet poster som är rows*cols, så blir varje post en ruta på kartan.

Jag har nu fastnat helt på hur man ska loopa ut dessa rutor relaterat till varandra. Alltså ska man ju loopa ut antalet rutor från andra tabellen relaterat till hur många cols/rows det finns i första tabellen.

Någon som har något förslag på detta?

Medlem sedan aug. 2004903 inlägg
#3

Nu vet jag inte hur du har tänkt dig, men jag hade gjort så här

Gör en table (html) dela upp tablen rent symboliskt med bord, platser osv med bilder, varje plats har en 5x5pix bild med ett platsnummer på, när någon vill boka en plats trycker de på den plats(bild) där de vill sitta, vid klickning för får dem upp ett formulär där de ska fylla i info osv...när det sen klickar boka, så läggs infon in i datan.

Jag föreslåt att t ex i tablen i databasen ha typ "Bokade" där platsnummret som de klickade på förs in i databasen, när detta sker byter du genom php bild på platsen till typ en 5x5 röd bild som refererar till bokad plats.... så hade jag gjort, men du kanske redan har tänkt ut detta :D

Medlem sedan mars 2005232 inlägg
#4

Givetvis ska jag göra på liknande sett som du säger Tulork!

Så långt som jag kommit nu är att jag skapat dessa tabeller.

[b]Table "lan":[/b]

 id | name | seat_row | seat_cols | nr_seats
----------------------------------------------
 1  | lan1 |    15      |    14       |   180

[b]Table "seatmap":[/b]

 id | event_id | name | is_seat  |  status
----------------------------------------
 1  |      1    |   A1  |    0/1   |  1/2/3
 2  |      1    |   A2  |    0/1   |  1/2/3
 3  |      1    |   A3  |    0/1   |  1/2/3
 4  |      1    |   A4  |    0/1   |  1/2/3
 5  |      1    |   A5  |    0/1   |  1/2/3
 6  |      1    |   A6  |    0/1   |  1/2/3
 7  |      1    |   A7  |    0/1   |  1/2/3
 8  |      1    |   A8  |    0/1   |  1/2/3
 9  |      1    |   A9  |    0/1   |  1/2/3

Tabellen "seatmap" är tänkt att den ska innehålla antalet poster som cols*row är i första tabellen. Alltså ska tabellen innehålla 210 poster och varje post ska indikera en ruta på platskartan. Sen är det inte tänkt att varje ruta ska vara just en bokbar plats utan den ska kunna vara t.ex en vägg eller liknande.

Det jag inte riktigt klarar av är att loopa ut alla poster i "seatmap" så att dem är relaterade till tabellen "lan". Alltså att alla rutor ska loopas ut och vara 14 cols och 15 rows.

Tacksam för hjälp! :birp

Medlem sedan mars 2005232 inlägg
#5

Jag har nu klurat ut hur detta ska vara, men skulle nu vilja ha lite mer hjälp! :e
Jag använder detta för att loopa ut alla rutor till kartan, men jag skulle vilja optimera det lite.

Jag använder ju två sql-frågor, men detta borde väl gå att köra med en join eller liknande?

Jag har aldrig jobbat med joins så det skulle vara kul att lära sig lite. Någon som har några förslag på ovanstående fråga och kanske några exempel?

   
   $sql_seats = "SELECT * FROM ".$prefix."lan ORDER BY id DESC";
   $result_seats = mysql_query($sql_seats);
   $r = mysql_fetch_assoc($result_seats);
		
   $event_id = $r['id'];

   $sql_seatmap = "SELECT * FROM ".$prefix."lan_seatmap WHERE event_id='" .$event_id. "'";
   $result_seatmap = mysql_query($sql_seatmap);
Medlem sedan maj 2005562 inlägg
#6

Visa hur tabellerna ser ut och vilken relation som gäller mellan dem. Beskriv även vad du vill få ut.

Medlem sedan mars 2005232 inlägg
#7

Tabellerna som jag använder är dem som jag har skrivit i ett inlägg ovan. Alltså i tabellen "lan" ska jag ha ut det senaste lanet. Det som är relaterat till varandra är id i tabellen "lan" och event_id i tabellen "seatmap".

I tabellen "seatmap" ska det finnas antalet poster som är cols*rows i "lan"-tabellen. Sedan ska jag loopa ut alla poster i "seatmap" som har event_id = id.

Medlem sedan maj 2005562 inlägg
#8

Hamatzu skrev:

I tabellen "seatmap" ska det finnas antalet poster som är cols*rows i "lan"-tabellen. Sedan ska jag loopa ut alla poster i "seatmap" som har event_id = id.

Förstår inte exakt problemet.

SELECT
    *
FROM 
    seatmap
WHERE 
    event_id = $id
;

där du innan har satt $id till önskat värde.

?

Medlem sedan mars 2005232 inlägg
#9

Det är inget problem egentligen, det är bara det att jag vill försöka att optimera min kod lite.

Jag gör precis så som du säger, men det jag vill göra är att slå ihop sql-frågorna som jag postat ovan. Jag har hört att detta borde gå att göra med join eller liknande. Jag har ingen erfarnehet av det och skulle behöva hjälp. :)

Medlem sedan dec. 20025 483 inlägg
#10
select *
  from lan l
inner
  join seatmap s
    on l.id = s.event_id
 where s.event_id = $event_id
order
    by l.id desc
Medlem sedan maj 2005562 inlägg
#11

Men vad vill du hämta med den första queryn ? Hämtar du samtliga sparade lan och platsbokningar samtidigt ? Isåfall varför ?

Medlem sedan mars 2005232 inlägg
#12

I första queryn vill jag hämta information om hur många rader och kolumner som kartan till platsbokningen ska vara, och lite annan info (se inlägg om hur tabellerna är uppbyggda ovanför).

I den andra queryn hämtar jag lika många poster som det finns row*col i första tabellen och har event_id=lan.id (Detta för att man vid ett senare tillfälle ska kunna lägga till fler lan med tillbehörande platsbokning).

Det är exakt detta jag gör nu och det fungerar, men jag tänkte om det finns någon möjlighet att slå ihop frågorna med en join. Kunde vara kul att lära sig lite nytt på traven. :bire

$sql_seats = "SELECT * FROM ".$prefix."lan ORDER BY id DESC";
$result_seats = mysql_query($sql_seats);
$r = mysql_fetch_assoc($result_seats);
		
//Give every name a comfortable variable
$event_id = $r['id'];
$name = $r['name'];
$cols = $r['seat_col'];
$rows = $r['seat_row'];		
			
$nr_squares = $cols*$rows;
			
		
$sql_seatmap = "SELECT * FROM ".$prefix."lan_seatmap WHERE event_id='" .$event_id. "'";
$result_seatmap = mysql_query($sql_seatmap);
     
$square_nr = 1;
$row_nr = 1; 

while($r = mysql_fetch_assoc($result_seatmap)) 
{
    
    $seat_id = $r['id'];
    
	if($square_nr<=$nr_squares)
	{
			   
            if($square_nr%$cols == 1) {
       		echo "<div style='float: left; width: 20px; height: 12px;'>".$row_nr. "</div>";
       		++$row_nr;
             }
       
       
             if($r['is_seat']) {
                echo "<div style='border: 1px solid #FFFFFF; width: 10px; height: 11px; background-color: green; float: left;'><a href='?page=".$_GET['page']."&amp;task=chg_map&amp;seat_id=" .$seat_id. "&amp;act=dis_seat'>x</a></div>";
             } 
             else 
            {
                echo "<div style='border: 1px solid #FFFFFF; background-color: #F6F9FB; width: 10px; height: 11px; float: left;'><a href='?page=".$_GET['page']."&amp;task=chg_map&amp;seat_id=" .$seat_id. "&amp;act=set_seat'>x</a></div>";
             }
       
       
             if($square_nr%$cols == 0) {
          	   echo "<div class='clear'></div>";   
             }
       
       ++$square_nr;
      }
    }

Hoppas att du förstår lite bättre nu, tacksam för all hjälp som ni lägger ner. :e

Medlem sedan mars 2005232 inlägg
#13

Tänkte jag kunde ta upp denna tråden igen, istället för att skapa en ny. Efter att detta projekt legat på is ett bra tag har jag kommit igång igen.

Jag har följande kod:

	$l = 1;
	
	$cols = "6";
	$rows = "11";
	
	$nr_squares = $cols*$rows; 
	
	$square_nr = 1;
	$row_nr = 1; 

	$break_row = array("2", "4", "6", "8", "10", "12");
	
	while($r1 = mysql_fetch_assoc($sql1)) 
	{
	    
	    $seat_id = $r2['id'];
	    
	    if($square_nr<=$nr_squares)
	    {
	               
	            if($square_nr%$cols == 1) 
				{
	               echo "<div style='float: left; width: 20px; height: 12px;'>".$row_nr. "</div>";
	               ++$row_nr;
	             }
	       
	       
	            echo "<div style='border: 1px solid #FFFFFF; background-color: #F6F9FB; width: 25px; height: 11px; float: left; margin: 1px;'><a href='?page=".$_GET['page']."&amp;seat_id=" .$seat_id. "'>".$r1['name']."</a></div>";
	       
	             if($square_nr%$cols == 0) 
				 {
	                 echo "<div class='clear'></div>";   
					 
					 if(in_array($row_nr, $break_row))
					 {
						echo "<div style='height: 10px;'>&nbsp;</div>";
					 }
	       
	             }
	       
	       ++$square_nr;
	      }
    }

Och detta fungerar precis som det ska och listar upp de platser som finns lediga på detta sättet, med platsens id från vänster till höger.

|A1| |A2| |A3| |A4| |A5| |A6|

|B1| |B2| |B4| |B4| |B5| |B6|
|B7| |B8| |B9| |B10| |B11| |B12|
       o.s.v
|_| |_| |_| |_| |_| |_|
|_| |_| |_| |_| |_| |_|

|_| |_| |_| |_| |_| |_|
|_| |_| |_| |_| |_| |_|

|_| |_| |_| |_| |_| |_|
|_| |_| |_| |_| |_| |_|

|_| |_| |_| |_| |_| |_|
|_| |_| |_| |_| |_| |_|

Men jag vill ha dem listade på följande sett, har suttit och försökt mig på en hel del kod hit och dit. Men får inte till det riktigt.

                  o.s.v
|A1|   |B1| |B7|     |_| |_|   |_| |_|   |_| |_|   |_| |_|
|A2|   |B2| |B8|     |_| |_|   |_| |_|   |_| |_|   |_| |_|
|A3|   |B3| |B9|     |_| |_|   |_| |_|   |_| |_|   |_| |_|
|A4|   |B4| |B10|   |_| |_|   |_| |_|   |_| |_|   |_| |_|
|A5|   |B5| |B11|   |_| |_|   |_| |_|   |_| |_|   |_| |_|
|A6|   |B6| |B12|   |_| |_|   |_| |_|   |_| |_|   |_| |_|

Alltså i stort sett likadant fast roterat 90 grader om man säger så. Någon som har några ideér?

129 ms totalt · 3 externa anrop · v20260731065814-full.02a0f7de
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)